FlameGraph
跳转到导航
跳转到搜索
On-CPU 火焰图
使用 perf:
# 指定命令
sudo perf record -F 99 -g -- command
# 指定 PID(使用逗号分隔)
sudo perf record -F 99 -g -p PID -- sleep 3
# 全系统
sudo perf record -F 99 -g -a -- sleep 3
sudo perf script | stackcollapse-perf | flamegraph > out.svg
Off-CPU 火焰图
eBPF
sudo offcputime -f > stack.txt
flamegraph --color=io --countname=us --width=900 --title="Off-CPU Time Flame Graph: idle system" < stack.txt > offcpu.svg
systemtap
./sample-bt-off-cpu -u -k -a -v -p PID -t 时长 > test.bt
stackcollapse-stap < test.bt | flamegraph --title="Off-CPU Time Flame Graph" --color=io > out.svg
如果出现以下错误:
WARNING: Too many CFI instuctions
WARNING: too many pending (warning) messages
WARNING: _stp_read_address failed to access memory location
ERROR: too many pending (error) messages
WARNING: Number of errors: 0, skipped probes: 102
可以这样试试:
sample-bt-off-cpu -u -k -p PID -t 时长 -a '-v -DMAXSKIPPED=1000' > test.bt
perf
Go
启用 HTTP profile[3],然后生成文本格式的报告:
go tool pprof -raw -output=a.pprof -seconds=5 二进制文件 http://$ADDR/debug/pprof/profile
注意:必须给出正确的二进制文件,否则会生成奇怪的数据。时长数据也可以在 URL 上以 ?seconds=5
的方式给出。
然后生成火焰图:
stackcollapse-go a.pprof | flamegraph > out.svg
参见
外部链接
- 白话火焰图 | 火丁笔记
- Memory Flame Graphs
- Introduction to off-CPU Time FlameGraphs
- speedscope: 运行于浏览器中的火焰图生成工具
- laixintao/flameshow: A terminal Flamegraph viewer.
- mstange/samply: Command-line sampling profiler for macOS and Linux: 使用 Firefox profiler 作为 UI
- flamegraph-rs/flamegraph: Easy flamegraphs for Rust projects and everything else, without Perl or pipes <3: 使用 perf 生成火焰图
- KDAB/hotspot: The Linux perf GUI for performance analysis.
- KDE/heaptrack: A heap memory profiler for Linux