热点分析火焰图

命令功能

采集某些时刻CPU、CYCLES、LOCK、CACHE_MISSES、ALLOC事件的栈信息,统计当前JVM中的热点方法,以火焰图与反向火焰图的形式查询和呈现。

不支持在容器宿主机采集容器内进程,若需采集容器内进程信息,请在容器中使用命令行工具。

命令格式

1
devkit java-perf hotspot [-p {pid}] [-d <DURATION> ] [-e {CPU,ALLOC,CYCLES,CACHE_MISSES,LOCK}] [-i <INTERVAL> | --interval=INTERVAL]

参数说明

表1 参数说明

参数

参数选项

说明

-h/--help

-

获取帮助信息。

-d/--duration

-

设置采集时长,单位为秒,默认为20秒,取值范围1至300秒,可Ctrl+C停止任务采集并开始分析。

-i/--interval

-

设置采样间隔,单位为毫秒,默认为10毫秒,取值范围1至1000毫秒。

-o/--output

-

设置报告输出目录,默认为工具安装目录下的data目录。

-p/--pid

-

指定采集热点方法的Java进程PID。

-e/--event

CPU/ALLOC/CYCLES/CACHE_MISSES/LOCK

指定采样事件类型,默认为CPU。

  • CPU
  • CYCLES
  • LOCK
  • CACHE_MISSES
  • ALLOC

使用示例

1
devkit java-perf hotspot -p 17329 -e CPU -d 60 -i 10 -o /opt

参数-p指定采集的进程号,参数-e CPU指定采集CPU事件类型的数据,参数-d 60采集时长为60秒,参数-i 10采样间隔为10毫秒,参数-o /opt指定报告输出目录为/opt。

返回信息如下:

1
2
JAVA HOTSPOT ANALYSIS(Press Ctrl+C to exit and generate the summary report)
The flame graph is generated in /opt/FlameGraph_CPU(31819)_20240612_104433.html.

任务生成火焰图html文件可使用浏览器查看,支持检索能力和反向火焰图。

图1 火焰图html
图2 反向火焰图
  • 反向火焰图是以栈顶为起点,逐步回溯至栈底,将调用方法一致的调用栈进行聚合。
  • 单击按钮可使火焰图上下翻转,单击按钮可是火焰图恢复至初始状态,单击按钮使火焰图按函数占比排序(默认为函数占比排序),单击按钮使火焰图按函数名称排序。