async-profiler
async-profiler
一个低开销的, 不会有安全点偏差问题(Safepoint bias problem)的 Java 采样分析器. 它使用 HotSpot-specific APIs (AsyncGetCallTrace) 来收集堆栈和内存分配信息, perf_events 收集系统调用. 可以运行在任何基于 HotSpot JVM 上虚拟机, 例如OpenJDK, Oracle JDK.
支持类型
Async Profiler 支持一下输出类型
- summary
- traces
- flat
- collapsed
- svg
- tree
- jfr
其中 svg, tree, jfr 需要有个文件输出
输出文件后缀会自动确定输出格式 *.svg, *.html *.jfr 对应 svg, tree, jfr
summary, traces, flat 可以组合 summary,traces=200,flat=200
常用命令
Linux 4.6 以上, 非root用户要采集内核调用栈需要修改两个值
# echo 1 > /proc/sys/kernel/perf_event_paranoid
# echo 0 > /proc/sys/kernel/kptr_restrict
火焰图,纵向从下至上,代表方法间的调用关系,横条的宽度代表所占CPU时间的多少.
# -d 采集时间为60s
# -e itimer 内核参数不符合, 没法变更, 此参数为降级参数, 不读取 perf_event, 只采集java
# -f 输出到 res.svg 文件, 根据后缀名是svg, 输出火焰图
./profiler.sh -e itimer -d 60 -f res.svg pid