全部产品
Search
文档中心

应用实时监控服务ARMS:使用线程剖析诊断代码层面的问题

更新时间:Jan 16, 2024

ARMS线程剖析是代码级的诊断工具,能够自动捕获慢调用的堆栈快照,真实还原代码执行的第一现场。

重要

线程剖析功能已不再维护,ARMS提供了开销更低、方法栈更准确的代码热点功能作为替代方案,建议使用持续剖析功能中的代码热点进行问题诊断。更多信息,请参见使用代码热点诊断慢调用链的问题

使用场景

说明

仅应用监控专家版支持线程剖析功能。

  • 当促销活动出现慢调用时,ARMS线程剖析可为您快速定位问题代码。

  • 当系统出现大量慢调用时,ARMS线程剖析可为您自动保存第一现场。

  • 当业务太复杂,偶发性慢调用无法复现时,ARMS线程剖析可为您还原代码真实执行轨迹。

设置线程剖析参数

  1. 登录ARMS控制台,在左侧导航栏选择应用监控 > 应用列表

  2. 应用列表页面顶部选择目标地域,然后单击目标应用名称。

    说明

    语言列显示Java图标图标的应用为接入应用监控的应用,显示-图标的应用为接入可观测链路 OpenTelemetry 版的应用。

  3. 在左侧导航栏中单击应用设置,然后单击自定义配置页签。

  4. 线程设置区域,可以打开或关闭线程剖析总控开关,并设置慢调用监听触发阈值

    说明
    • 服务调用耗时超过该阈值(默认值为2000ms)时才会启动监听,监听一直持续到此次调用结束但不超过15s。

    • 建议将此阈值设为调用耗时的第99分位值。假设有100次调用,则按耗时从小到大排序,排在第99位的耗时就是第99分位值。

    Thread Settings

  5. 在页面底部单击保存

通过接口调用查看线程剖析详情

  1. 登录ARMS控制台,在左侧导航栏选择应用监控 > 应用列表

  2. 应用列表页面顶部选择目标地域,然后单击目标应用名称。

    说明

    语言列显示Java图标图标的应用为接入应用监控的应用,显示-图标的应用为接入可观测链路 OpenTelemetry 版的应用。

  3. 在左侧导航栏中单击接口调用,并在页面右侧选择目标接口,然后单击调用链查询页签。

  4. 调用链查询页签上单击目标TraceId链接。

  5. 详情列中单击放大镜图标,然后单击线程剖析页签。

    Thread analysis

    说明
    • 实际耗时是服务调用的实际执行时间,不受线程剖析影响。

    • 监听耗时是能够被线程剖析监听到的耗时。通常情况下,监听耗时≈实际耗时-慢调用触发阈值。

通过调用链路查询查看线程剖析详情

  1. ARMS控制台左侧导航栏中选择应用监控 > 调用链路查询

  2. 调用链路查询页面的参数类型下拉列表中选择仅含线程剖析快照,并单击添加到查询条件

  3. 在搜索结果中单击目标TraceId链接。

  4. 详情列中单击放大镜图标,然后单击线程剖析页签。

常见问题

  • 实际耗时是什么?

    答:实际耗时是服务调用的真实执行时间,不受线程剖析影响。

  • 监听耗时是什么?

    答:监听耗时是指能够被线程剖析监听到的调用执行时间。为了尽量降低监听压力,线程剖析只会对每次调用超过慢调用监听触发阈值(默认为2s)后的执行时间进行监听。例如一次实际耗时为5s的慢调用,前2s不会监听,只监听3s~5s这一区间。如果一次调用耗时只有1.8s,那它将不会被监听。

  • 为什么监听耗时小于实际耗时?甚至有些超过监听触发阈值的慢调用也没有被监听?

    答:

    • 由于线程剖析只监听一次调用超过触发阈值后的执行时间,因此,通常情况下,监听耗时≈实际耗时-慢调用监听触发阈值。

    • 如果系统在同一时间内出现大量慢调用,由于监听线程有限,无法保证每个慢调用在满足触发阈值的第一时间就被监听。此时,就可能出现监听耗时远小于实际耗时的情况,甚至不会被监听。

    • 为了保证超慢调用被监听,线程剖析针对5s以上的超慢调用设置了独立的监听线程,因此会出现:监听耗时≈实际耗时-5s。

相关文档

为避免在出现问题后被动诊断错误原因,您还可以使用ARMS的告警功能针对一个接口或全部接口创建告警,即可在出现问题时向运维团队发送通知。如何创建告警,请参见应用监控告警规则