具体的步骤参见这里: 《flame graph:图形化perf call stack数据的小工具》
使用SystemTap脚本制作火焰图,内存较少时,分配存储采样的数组可能失败,需要编写脚本,还要安装kernel的debuginfo包。使用perf的话,相对来说要简单一些。不过在有kernel的debuginfo包的时候,采样显示的信息要更丰富一些。
为了使用perf制作火焰图方便,我编写了下面的脚本,贴上来备忘,也方便需要的人。
脚本如下:
if [ $ # -ne 1 ];then
echo
"Usage: $0 seconds"
exit
echo
"Usage: $0 seconds"
exit
fi
perf record
-a
-g
-o perf.data
&
PID
=
`
ps aux
| grep
"perf record"
| grep
-v grep
| awk
'{print $2}'
`
if [
-n
"$PID" ];
then
sleep $
kill
-s INT $PID
fi
# wait until perf exite
sleep
perf script
-i perf.data
&
> perf.unfold
perl stackcollapse
-perf.pl perf.unfold
&
> perf.folded
perl flamegraph.pl perf.folded
>perf.svg
将上面的脚本保存为perf_flame_graph.sh。根据上面的Usage可以看出在执行的时候,只需要指定采样的时间,单位为秒。
下面是我在测试机上制作的火焰图:
我这里制作的火焰图没有指定具体的进程或线程,如果只想关注某个具体的进程,可以在pref record命令后面加上命令或者通过-p选项指定进程ID。更多的参数和选项参见man perf-record。