很多故障和性能问题都是由代码层面的问题导致的,这类问题通常很难定位。线程剖析能够对应用进行线程分析,形成对应的剖析记录,通过分析CPU用时占比、线程堆栈详情等,定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等,从而找到代码问题,解决故障和性能瓶颈。
说明:仅支持javaAgent类型探针线程剖析。
登录透视宝后,单击Web应用服务卡片,在当前应用服务的性能分析页面,单击左侧导航栏的线程剖析,查看自定义的关键事务详细分析。
如下图所示为应用服务名称为“demo-0.0.2”的实例进程列表,监控数据的时间范围为2022.06.09 17:40:05-2022.06.13 18:10:05。
剖析线程流程:
1. 创建/批量创建线程剖析任务
1) 在线程剖析页面的实例列表页签,单击应用实例对应的剖析。
支持批量创建线程剖析任务,勾选一个或多个应用实例对应的复选框,单击实例列表对应的线程剖析。
说明:在线状态的实例才支持线程剖析。
2) 在打开的线程剖析设置对话框,分别设定剖析持续时间(即数据采集时长)和剖析采样频率(即数据采集频率)。如下图所示,剖析持续时间选择1min,剖析采样频率选择50ms,则线程剖析任务每50ms采集一次数据,采集时间长达1min。
3) 单击确定后,开始执行剖析任务,此时当前实例状态显示为剖析中,如下图所示。
2. 查看线程剖析详情
剖析任务结束后,在线程剖析>实例列表,单击应用实例对应的剖析记录,查看剖析详情,如下图所示:
剖析列表展示以下信息:
列表展示项 | 说明 | 可执行的操作 |
开始时间 | 执行剖析实例进程任务的开始时间。 | Ø 单击单个实例进程的剖析记录,进入线程剖析的详情页,参看线程剖析详情。 Ø 单击,设置剖析列表的展示项,通过勾选/取消勾选来选择展示/隐藏实例进程的相关信息。 默认隐藏项包括New(个)、Runnable(个)、Timed Waiting(个)、Terminated(个)、结束时间。 Ø 按照实例进程查找实例进程 在列表右上方的搜索框,输入实例进程关键字,单击。 Ø 筛选实例 在列表左上方,单击实例对应的下拉列表,输入实例关键字,列表展示模糊匹配的实例结果。 Ø 删除剖析记录 单击实例进程对应的删除。 Ø 批量删除剖析记录 勾选一个或多个实例进程对应的复选框,单击列表右上方对应的删除。 |
持续时长 | 剖析线程的数据采集时长。 | |
线程总数 | 从开始剖析任务后的持续时长中,当前实例的总线程数。 | |
Blocked | 从开始剖析任务后的持续时长中,当前实例线程发生死锁的线程数量。 | |
采集间隔 | 剖析线程的数据采集频率。 | |
记录状态 | 包括初始化、完成、中断。 Ø 创建剖析线程任务后的1min里为生效时间,记录状态为初始化。 Ø 初始化完成之后开始剖析,按照设定好的持续时间完成剖析,记录状态为完成。 Ø 线程剖析过程中,探针熔断、应用宕机、服务异常时,记录状态为中断。 | |
结束时间 | 完成剖析任务的时间。 |
线程剖析详情
在线程剖析>剖析记录页签,单击单次剖析记录对应的实例进程,查看剖析详情,包括线程剖析任务的基本信息、线程数的时间趋势图、线程状态统计列表、线程列表。以下图为例:
页面展示项 | 说明 | 可执行的操作 |
线程数趋势图 | 从开始剖析到剖析结束的持续时间里,线程数量随时间的变化趋势。 | 鼠标移入图中,显示十字光标所在的横坐标时间点对应的线程信息。 |
线程状态统计列表 | 从开始剖析到剖析结束的持续时间里,统计总线程数及六种线程状态的数量和占比。 六线程状态包括:New、Runnable、Blocked、Waiting 、Timed Waiting、Terminated。 | 无 |
线程列表 | 包括所有线程信息。 单行展示具体线程对应的线程组、线程状态、CPU用时、CPU用时占比、Waiting On、Owned By、Owned Monitors、开始时间。 | Ø 单击线程名称,追踪堆栈信息。 Ø 单击列表右上方的导出excel,将当前列表保存至本地。 Ø 筛选线程状态 单击列表左上方的线程状态对应的下拉列表,查看单一状态对应的所有线程信息。 Ø 支持按照CPU用时、CPU用时占比的正序/倒序对列表重排序。 |