name
arthas-cpu-high
description
排查 JVM / 应用 CPU 飙高(线程定位 + 代码路径分析)
JVM CPU 飙高排查指南(Arthas)
适用场景:机器 CPU 飙高、应用响应变慢、负载异常升高。
原则:先用低风险工具定位「哪个线程在忙」,再逐步缩小到「哪个方法/代码路径」。
- 先确认当前 JVM 整体状态(低风险)
使用
dashboard
查看 CPU/线程/GC 概况(建议设置有限次数):
关注:CPU、线程数、GC 次数/耗时是否异常。
- 定位最忙线程(关键步骤)
使用
thread
找出最忙的前 N 个线程并打印堆栈:
例如:
topN=3
或
topN=5
记录每个热点线程的
threadId
与堆栈关键方法名(可用
take_notes
记录证据)。
判断方向:
如果堆栈显示在
java.util.regex
、JSON 序列化、日志格式化等:可能是 CPU 密集计算。
如果堆栈显示在锁竞争:继续看是否有大量
BLOCKED
,并考虑用
thread(blocking=true)
找出阻塞源头线程。
- 进一步确认热点方法的调用路径(按需、有限制)
当热点线程堆栈指向某个「可疑方法」时:
优先使用
stack
/
trace
针对该方法做路径确认(避免宽泛匹配)。
如果需要观测入参/返回值,再考虑
watch
或
tt
,并设置合理的执行次数与超时,避免对线上造成压力。
- 输出诊断结论
报告至少包含:
现象与证据:dashboard 摘要 + topN 线程堆栈关键片段
初步结论:CPU 主要消耗在什么类型的逻辑(计算/锁/GC/日志等)
下一步:建议进一步 trace/watch 的目标方法(给出类名+方法名的精确范围),或建议用户提供主包名/关键接口信息以继续收敛