如何将GNU gprof分析数据可视化为flamegraph?求工具或方案
将gprof数据转换为火焰图的方案
我用GNU gprof对一款C++应用做了性能分析,发现Python工具gprof2dot可以把gprof数据转成图表,但我最终想把数据可视化为Brendan Gregg推广的火焰图。奇怪的是,我没找到能把gprof数据转换成火焰图兼容格式的工具,请问有没有这类工具或者可行的替代方案?
1. 专用转换工具:gprof2flame
有现成工具gprof2flame可直接将gprof输出转为火焰图所需的折叠栈格式,步骤如下:
- 先通过gprof生成文本格式的分析数据:
gprof ./your-application gmon.out > profile.txt - 用
gprof2flame转换为折叠栈:gprof2flame profile.txt > profile.folded - 最后用火焰图脚本生成可视化图表:
flamegraph.pl profile.folded > flamegraph.svg
工具可通过pip安装:pip install gprof2flame
2. 手动转换方案
如果工具不可用,可手动从gprof输出中提取信息生成折叠栈格式。火焰图的折叠格式要求每行是分号分隔的调用栈 + 采样次数,示例:
main;process_data;parse_input 42 main;render_ui;draw_widget 18
你可以从gprof的Flat profile(获取函数采样计数)和Call graph(获取调用关系)中提取数据,用Python或Shell脚本批量生成符合要求的格式。
3. 更高效的替代方案:换用原生支持火焰图的工具
gprof基于插桩式采样,本身效率和灵活性不如现代采样工具,直接换用以下工具能更顺畅生成火焰图:
- perf(Linux原生工具):
- 采样程序运行数据:
perf record -F 99 -g ./your-application - 转换为折叠栈:
perf script | stackcollapse-perf.pl > out.folded - 生成火焰图:
flamegraph.pl out.folded > flamegraph.svg
- 采样程序运行数据:
- gperftools(Google性能工具):
- 编译时链接性能库:
g++ -o your-application src/*.cpp -lprofiler - 运行程序生成profile:
CPUPROFILE=app_profile.out ./your-application - 直接生成火焰图:
pprof --svg ./your-application app_profile.out > flamegraph.svg
- 编译时链接性能库:
这些工具采用基于事件的采样,对程序运行的影响更小,生成火焰图的流程也更简洁。
内容的提问来源于stack exchange,提问作者apprentice
相关产品推荐
相关产品推荐

