火焰图 性能分析 java,使用火焰图(FlameGraph)分析性能热点

1. 介绍

火焰图是一个可视化工具,可以将诸多性能检测相关的命令行工具的结果进行可视化展示,方便侦测性能热点。其支持将以下工具的采样结果进行可视化展示:

Linux: perf, eBPF, SystemTap, and ktap

Solaris, illumos, FreeBSD: DTrace

Mac OS X: DTrace and Instruments

Windows: Xperf.exe

本文以perf为例介绍(关于perf的用法可以参考perf examples如何在Linux上采集性能数据并且生成火焰图。

因为我们采集的是JAVA进程,perf采集的内容只会显示一个JAVA线程的内存地址,不会详细展示其堆栈信息,因此我们需要另外个工具perf-map-agent 来帮助我们

PS: 感觉火焰图来分析JAVA性能热点还是略麻烦,依赖比较多,单纯看JAVA线程的cpu占用top可以考虑使用greys-anatomy。 如果是C++程序或者C程序,用火焰图更加方便些。

2. 监控某进程性能热点

2.1 安装火焰图

clone下github上项目即可

git clone https://github.com/brendangregg/FlameGraph.git

2.2 安装perf-map-agent

git clone https://github.com/jvm-profiling-tools/perf-map-agent

cd perf-map-agent/

sudo yum install cmake

sudo yum install gcc

sudo yum install gcc-c++

sudo cmake .

sudo make

如果cmake提示版本低按照如下方式升级

wget https://cmake.org/files/v3.6/cmake-3.6.2.tar.gz

tar -zxvf cmake-3.6.2.tar.gz

cd cmake-3.6.2

sudo ./bootstrap --prefix=/usr/local

sudo make

sudo make install

2.2 性能采用并且生成火焰图

PS:采样频率建议在4000以内,避免造成太多开销

# -F设定频率,-p指定线程,-g表示记录调用栈信息,该命令执行采样5秒后会在当前目录生成perf.data

sudo perf record -F99 -p -g sleep 60

# 获取进程堆栈信息

./jmaps

# 下面是一个工作流,直接通过perf script解析perf.data里面的内容,然后通过perl脚本生成火焰图。将自己的perf.data拷贝到FlameGraph所在目录,再执行以下命令

sudo perf script | ./stackcollapse-perf.pl --all | ./flamegraph.pl --color=java --hash > kaiming-example-perf.svg

将生成的kaiming-example-perf.svg拷贝到本地,并且用浏览器打开就可以看到火焰图了:

100f54bf0ad961705002b7c7e202ef8a.png

2.3 解读火焰图

X轴是CPU时间,色块越宽,表示对应函数占用的CPU时间越多,可能是性能热点。Y轴是函数调用栈,最顶端的是正在执行的函数。如果出现unknow则说明缺少调试信息。

697678b0b8ab07aba72c292379551cd7.png

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值