flame graph:图形化perf call stack数据的小工具

很多人习惯于以图形的方式观察数据。但是perf目前在图形化上还非常不足。幸运的是,Brendan Gregg为我们开发了一个小工具--Flame Graph,能够将perf等剖析工具采到的call stack数据转换为svg图。svg是一种矢量图,可以被无限地放大。

Flame Graph项目位于GitHub上:

https://github.com/brendangregg/FlameGraph

看官可以用git将其clone下来:

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

进入FlameGraph的目录后,可以发现这个工具其实是一组perl脚本:

flamegraph.pl

stackcollapse-instruments.pl

stackcollapse.pl

stackcollapse-perf.pl

stackcollapse-stap.pl

stackcollapse*.pl用以将perf等工具获取的原始采样数据转换为flamegraph能够识别的文件格式。 flamegraph.pl用以生成svg图。

该工具目前能够支持Dtrace, perf, Systemtap以及XCode Instruments。

我们以perf为例,看一下flamegraph的使用方法:

首先执行perf record,记得通过-g参数记录call trace.

\#perf record -a -g

Ctrl+c结束执行后,在当前目录下会生成采样数据perf.data.

下面用perf script工具对perf.data进行解析:

\#perf script -i perf.data &> perf.unfold

随后,将perf.unfold中的符号进行折叠:

\#./stackcollapse-perf.pl perf.unfold &> perf.folded

最后一步,生成svg图:

\#./flamegraph.pl perf.folded > perf.svg

OK,perf.svg就是能够展示call trace的矢量图。ubuntu下,可以直接使用eog工具打开此文件.

SVG其实是一种XML格式的矢量图。看官如果用浏览器打开上述文件时,可以得到一些动态效果。比如鼠标悬停于某个函数时,能够看到该函数的热度,更便于分析热点所在。


你可能感兴趣的:(flame graph:图形化perf call stack数据的小工具)