用perf或者别的东西生成perf.data后,可以用如下方法生成火焰图:
先把https://github.com/brendangregg/FlameGraph.git
clone到目录$FlameGraphPath
,然后
perf script -i perf.data > perf.unfold |
perf.unfold
可能会比perf.data
大将近十倍。所以一般是直接pipe进stackcollapse-perf.pl
:
perf script -i perf.data | $FlameGraphPath/stackcollapse-perf.pl > perf.folded |
注意,解析perf.data
的时候好像要读取binary里的符号,所以在解析的时候不要重新编译之类的。
¶ inferno
如果嫌perl写的stackcollapse-perf.pl
太慢的话,可以尝试rust写的inferno
:
https://docs.rs/inferno/latest/inferno/
¶ 安装
任选其一
¶ cargo
cargo install inferno |
¶ nix
nix-env -iA nixpkgs.inferno |
¶ 使用
¶
生成perf.folded
perf script -i perf.data | inferno-collapse-perf > perf.folded |
实测比perl版本快大约4倍。
¶ 画火焰图(不推荐)
默认太宽了。perl版本的宽度是1200,所以这里也设置成1200 |
生成的perf.svg
字太小了。
¶ 建议的用法
用inferno
生成perf.folded
,再用flamegraph.pl
来画火焰图:
perf script -i perf.data | inferno-collapse-perf > perf.folded |