perf.data生成火焰图
用perf或者别的东西生成perf.data后,可以用如下方法生成火焰图:
先把https://github.com/brendangregg/FlameGraph.git clone到目录$FlameGraphPath,然后
perf script -i perf.data > perf.unfold
$FlameGraphPath/stackcollapse-perf.pl perf.unfold > perf.folded
perf.unfold可能会比perf.data大将近十倍。所以一般是直接pipe进stackcollapse-perf.pl:
perf script -i perf.data | $FlameGraphPath/stackcollapse-perf.pl > perf.folded
$FlameGraphPath/flamegraph.pl perf.folded > perf.svg
注意,解析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
inferno-flamegraph --width=1200 < perf.folded > perf.svg
生成的perf.svg字太小了。
建议的用法
用inferno生成perf.folded,再用flamegraph.pl来画火焰图:
perf script -i perf.data | inferno-collapse-perf > perf.folded
$FlameGraphPath/flamegraph.pl perf.folded > perf.svg

浙公网安备 33010602011771号