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

使用场景

  • 当促销活动出现慢调用时,ARMS线程剖析可为您快速定位问题代码。
  • 当系统出现大量慢调用时,ARMS线程剖析可为您自动保存第一现场。
  • 当业务太复杂,偶发性慢调用无法复现时,ARMS线程剖析可为您还原代码真实执行轨迹。

设置线程剖析参数

  1. 登录ARMS控制台
  2. 在左侧导航栏选择应用监控 > 应用列表,并在顶部菜单栏选择目标地域。
  3. 应用列表页面,单击目标应用名称。
  4. 在左侧导航栏中单击应用设置,然后单击自定义配置页签。
  5. 线程设置区域,可以打开或关闭线程剖析总控开关,并设置慢调用监听触发阈值
    说明
    • 服务调用耗时超过该阈值(默认值为2000ms)时才会启动监听,监听一直持续到此次调用结束但不超过15s。

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

    Thread settings

通过接口快照查看线程剖析详情

  1. 在控制台左侧导航栏选择应用监控 > 应用列表,并在顶部菜单栏选择目标地域。
  2. 应用列表页面,单击目标应用的名称。
  3. 在左侧导航栏中单击接口调用,并在页面右侧选择目标接口,然后单击接口快照页签。
  4. 接口快照页签上单击目标TraceId链接。

    进入调用链路页签。

  5. 线程剖析列中单击放大镜图标。

    弹出线程剖析对话框。

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

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

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

  1. 在控制台左侧导航栏中选择应用监控 > 调用链路查询
  2. 调用链路查询页面的参数类型下拉列表中选择仅含线程剖析快照,并单击添加到查询条件Thread profiling snapshot
  3. 在搜索结果中单击目标TraceId链接。

    进入调用链路页签。

  4. 线程剖析列中单击放大镜图标。

    弹出线程剖析对话框。

常见问题

  • 实际耗时是什么?

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

  • 监听耗时是什么?

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

  • 为什么监听耗时小于实际耗时?甚至有些超过监听触发阈值的慢调用也没有被监听?
    答:
    • 由于线程剖析只监听一次调用超过触发阈值后的执行时间,因此,通常情况下,监听耗时≈实际耗时-慢调用监听触发阈值。
    • 如果系统在同一时间内出现大量慢调用,由于监听线程有限,无法保证每个慢调用在满足触发阈值的第一时间就被监听。此时,就可能出现监听耗时远小于实际耗时的情况,甚至不会被监听。
    • 为了保证超慢调用被监听,线程剖析针对5s以上的超慢调用设置了独立的监听线程,因此会出现:监听耗时≈实际耗时-5s。