perf是由Linux Kernel提供的动态追踪调试工具,我们可以使用perf对运行时的程序进行分析
相比单纯依赖log,core进行离线排查,perf是一种在线的调试手段,可以在线上随时进行采样并进行分析,无需预先埋点,所带来的只是采样时间段内的一些性能损耗,这种特性使perf很适合于排查未知的问题
perf生成的运行时栈可以通过FlameGraph生成交互式的图表,可以更方便地分析热点
安装perf
sudo apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r` // ubuntu
sudo yum install perf // centos
使用perf对特定进程进行采样
sudo perf record -p 14573 -g -- sleep 60 // 对pid为14573的进程进行60秒的采样
sudo perf script > out.perf //输出采样数据
使用FlameGraph产生火焰图
git clone https://github.com/brendangregg/FlameGraph //FlameGraph是一系列perl脚本,clone下来即可使用
./stackcollapse-perf.pl out.perf > out.folded //生成折叠后的调用栈
./flamegraph.pl out.folded > out.svg //生成火焰图