更新时间:2025-08-19 GMT+08:00
分享

通过Debugging诊断代码

Debugging诊断可协助用户分析线程状况,获取方法及对象实时参数。方便开发人员从实时的远程应用程序中获取调试信息,而无需重新启动应用程序,也不会阻止它并导致服务停机。

使用限制

  1. 为了应用运行稳定,强烈建议您按照要求升级JDK版本,在低版本的JDK上使用Debugging诊断功能,存在应用崩溃的风险。
  2. Debugging诊断当前受限使用。
    表1 JDK版本说明

    JDK类型

    版本

    OpenJDK

    • OpenJDK 8u352+
    • OpenJDK 17.0.5+

    Oracle JDK

    • Oracle JDK 17.0.9+
    表2 Agent版本说明

    Agent版本

    说明

    2.4.10-profiler

    Agent版本2.4.10-profiler及以后版本,支持Debugging诊断。

    表3 使用限制以及说明

    序号

    使用限制及说明

    1

    Debugging诊断需要环境中含有jdk8或者jdk17,如果仅有JRE则无法使用。

    2

    Debugging诊断仅支持JAVA语言。

性能影响

Debugging诊断功能经性能测试,在一般的应用所有功能效果全部开启的情况下, CPU提升<5%,内存提升<100MB,时延提升<5%左右。

通过Debugging诊断代码

Debugging诊断代码支持如下功能:

  • 线程分析支持显示该应用的所有线程和查看线程的堆栈信息。通过Debugging诊断线程,帮助用户快速定位耗时较高的线程。
  • 方法分析支持检查正在运行的方法的耗时明细、调用来源以及方法源码。通过Debugging诊断方法,帮助用户快速定位问题的根本原因,以及问题线下无法复现或日志缺失等场景。
  • 对象分析用于分析某个对象内部状态,并支持查看对象参数值和详细信息。

操作步骤

  1. 登录APM控制台
  2. 单击左侧,选择“管理与监管> 应用性能管理 APM”,进入APM服务页面。
  3. 在左侧导航栏选择“性能监控 >组件列表”,进入组件列表页面。
  4. 在左侧“快速筛选”栏中,选择“区域”、“应用”以及“技术栈”。
  5. 单击“组件”列,某一个组件名称,进入该组件指标项详情页。
  6. 单击“Debugging诊断”,切换至Debugging诊断页签。

    图1 组件Debugging诊断

  7. 进入Debugging诊断页签后,您可以根据需要执行如下操作:

    • 线程分析

      由于线程分析获取方法以及对象的实时参数,因此线程的状态等相关信息可能会产生变化。

      1. 切换至Debugging诊断页签。默认展示“线程分析”页面。
        图2 组件Debugging诊断-线程分析
      2. 在实例的下拉菜单中,选择一个实例,可以查看此实例下所有线程的线程名称、CPU使用率、线程数量。您还可以根据需要执行以下操作:
        • 查询阻塞源线程:在线程分析页面的右上角,单击“查询阻塞源线程”按钮,查看阻塞源线程的具体信息。
        • 重新执行:单击“重新执行”,重新执行查询操作。
        • 搜索线程:在搜索栏中,输入线程名称,单击,查看线程信息。
        • 查看线程状态:支持按照NEW、BLOCKED、WAITING、TIMED_WAITING、TERMINATED、RUNNABLE分类,查看此实例下线程的状态。
      3. 单击线程名称前,查看该线程分析信息。

        单击操作列的“查询堆栈”按钮,可以查看实时堆栈跟踪信息。如果“查询堆栈”按钮置灰,表示内部线程不支持查询堆栈的操作。

        图3 组件Debugging诊断-线程分析信息
      4. 单击操作列“查询堆栈”按钮,获取堆栈跟踪信息。如果“查询堆栈”按钮置灰,表示内部线程不支持查询堆栈的操作。
        图4 组件Debugging诊断-线程分析查询堆栈
      5. 单击“关闭”,展示“线程分析”页面。
    • 方法分析
      1. 单击“方法分析”,进入方法分析页签。
      2. 在“请输入类名”对话框中,输入类型。单击,在下拉菜单中,选中类名。

        单击“请选择方法名”对话框,选择方法名。单击“确认”,页面展示该方法的某一次执行的信息。

        图5 组件Debugging诊断-方法分析
        • 页面左侧展示该方法的执行记录,包括:耗时明细、调用来源以及方法源码。
          1. 耗时明细展示调用方法,耗时时间,“下钻”操作。
          2. 单击“下钻”展示某个调用方法的详细信息。
        • 页面右侧展示默认观测项目,包括:Parameters、Return Object、Thrown Exception以及Target。
        • 选择重载方法:在下拉菜单中,重新选择一个方法。
        • 设置过滤条件:设置方法执行条件,过滤出符合条件的方法记录。
          图6 组件Debugging诊断-方法分析设置过滤条件
          1. 过滤项:在下拉菜单中选择或者手动输入过滤项。
          2. 选择过滤条件:在下拉菜单中选择过滤条件。
          3. 请输入过滤项的值:手动输入过滤项的值。
          4. 单击“添加”,过滤条件会显示在当前对话框。
          5. 单击“提交”,完成设置。
    • 对象分析
      1. 单击“对象分析”,进入对象分析页签。
        图7 组件Debugging诊断-对象分析
      2. 输入类名,选择实例后,单击“确认”,展示该实例中当前字段的实时取值。包括:类型、字段名以及详情。
      3. 单击详情列的“查看详情”,页面右侧区域展示该字段的详细信息。

了解“Debugging诊断”的更多内容,请参见Debugging诊断

相关文档