FlameGraph

来自百合仙子's Wiki
跳转到导航 跳转到搜索

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

使用 bcc 工具(linux >= 4.6)[1]

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

使用 agentzhsystemtap 脚本:

./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

使用 perf_events[2]

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

参见

外部链接

参考资料