传统 Java CPU 排查思路一般包含 4 个步骤:
- top 命令:找到 CPU 消耗最多的进程号
- top -Hp 进程号:找到 CPU 消耗最多的线程号(列名仍为 PID)
- printf "%x\n" 线程号:把线程号转换成 16 进制
- jstack 进程号 | grep 16进制线程号 -A 10:定位到具体的方法堆栈
然而这套方法存在两个显著缺陷:
- 操作流程复杂,往往需要多次 jstack 才能定位
- 只能诊断在线问题,无法记录历史快照
因此,业界领先的 APM 产品(如阿里云 ARMS)都提供了持续剖析(Continuous Profiling)能力,可以常态化记录 CPU 开销,随时回溯历史快照。




