通过Debugging诊断代码
Debugging诊断可协助用户分析线程状况,获取方法及对象实时参数。方便开发人员从实时的远程应用程序中获取调试信息,而无需重新启动应用程序,也不会阻止它并导致服务停机。
使用限制
- 为了应用运行稳定,强烈建议您按照要求升级JDK版本,在低版本的JDK上使用Debugging诊断功能,存在应用崩溃的风险。
- 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诊断方法,帮助用户快速定位问题的根本原因,以及问题线下无法复现或日志缺失等场景。
- 对象分析用于分析某个对象内部状态,并支持查看对象参数值和详细信息。
操作步骤
- 登录APM控制台。
- 单击左侧
,选择“管理与监管> 应用性能管理 APM”,进入APM服务页面。
- 在左侧导航栏选择“性能监控 >组件列表”,进入组件列表页面。
- 在左侧“快速筛选”栏中,选择“区域”、“应用”以及“技术栈”。
- 单击“组件”列,某一个组件名称,进入该组件指标项详情页。
- 单击“Debugging诊断”,切换至Debugging诊断页签。
图1 组件Debugging诊断
- 进入Debugging诊断页签后,您可以根据需要执行如下操作:
- 线程分析
由于线程分析获取方法以及对象的实时参数,因此线程的状态等相关信息可能会产生变化。
- 切换至Debugging诊断页签。默认展示“线程分析”页面。
图2 组件Debugging诊断-线程分析
- 在实例的下拉菜单中,选择一个实例,可以查看此实例下所有线程的线程名称、CPU使用率、线程数量。您还可以根据需要执行以下操作:
- 查询阻塞源线程:在线程分析页面的右上角,单击“查询阻塞源线程”按钮,查看阻塞源线程的具体信息。
- 重新执行:单击“重新执行”,重新执行查询操作。
- 搜索线程:在搜索栏中,输入线程名称,单击
,查看线程信息。
- 查看线程状态:支持按照NEW、BLOCKED、WAITING、TIMED_WAITING、TERMINATED、RUNNABLE分类,查看此实例下线程的状态。
- 单击线程名称前
,查看该线程分析信息。
单击操作列的“查询堆栈”按钮,可以查看实时堆栈跟踪信息。如果“查询堆栈”按钮置灰,表示内部线程不支持查询堆栈的操作。
图3 组件Debugging诊断-线程分析信息 - 单击操作列“查询堆栈”按钮,获取堆栈跟踪信息。如果“查询堆栈”按钮置灰,表示内部线程不支持查询堆栈的操作。
图4 组件Debugging诊断-线程分析查询堆栈
- 单击“关闭”,展示“线程分析”页面。
- 切换至Debugging诊断页签。默认展示“线程分析”页面。
- 方法分析
- 单击“方法分析”,进入方法分析页签。
- 在“请输入类名”对话框中,输入类型。单击
,在下拉菜单中,选中类名。
单击“请选择方法名”对话框,选择方法名。单击“确认”,页面展示该方法的某一次执行的信息。
图5 组件Debugging诊断-方法分析- 页面左侧展示该方法的执行记录,包括:耗时明细、调用来源以及方法源码。
- 耗时明细展示调用方法,耗时时间,“下钻”操作。
- 单击“下钻”展示某个调用方法的详细信息。
- 页面右侧展示默认观测项目,包括:Parameters、Return Object、Thrown Exception以及Target。
- 选择重载方法:在下拉菜单中,重新选择一个方法。
- 设置过滤条件:设置方法执行条件,过滤出符合条件的方法记录。
图6 组件Debugging诊断-方法分析设置过滤条件
- 过滤项:在下拉菜单中选择或者手动输入过滤项。
- 选择过滤条件:在下拉菜单中选择过滤条件。
- 请输入过滤项的值:手动输入过滤项的值。
- 单击“添加”,过滤条件会显示在当前对话框。
- 单击“提交”,完成设置。
- 页面左侧展示该方法的执行记录,包括:耗时明细、调用来源以及方法源码。
- 对象分析
- 单击“对象分析”,进入对象分析页签。
图7 组件Debugging诊断-对象分析
- 输入类名,选择实例后,单击“确认”,展示该实例中当前字段的实时取值。包括:类型、字段名以及详情。
- 单击详情列的“查看详情”,页面右侧区域展示该字段的详细信息。
- 单击“对象分析”,进入对象分析页签。
- 线程分析
了解“Debugging诊断”的更多内容,请参见Debugging诊断。