【每日鲜蘑】天道下的火焰图

384 阅读1分钟

Linux的 linux-perl 工具

$ sudo perf record -F 81 -p 14301 -g -- sleep 20

上面的代码中,perf record表示记录,-F 81表示每秒81次,-p 14301是进程号,即对哪个进程进行分析,-g表示记录调用栈,sleep 20则是持续30秒。

为了便于阅读,perf record命令可以统计每个调用栈出现的百分比,然后从高到低排列。

$ sudo perf report -n --stdio
  • 执行sudo perf report -n可以生成报告的预览。
  • 执行sudo perf report -n --stdio可以生成一个详细的报告。
  • 执行sudo perf script可以dumpperf.data的内容。
# 将 perf.data 的内容 dump 到 out.perf
$ sudo perf script > out.perf

生成火焰图

通常的做法是将out.perf拷贝到本地机器,在本地生成火焰图:

$ git clone --depth 1 https://github.com/brendangregg/FlameGraph.git
# 折叠调用栈
$ FlameGraph/stackcollapse-perf.pl out.perf > out.folded
# 生成火焰图
$ FlameGraph/flamegraph.pl out.folded > out.svg

生成火焰图可以指定参数,–width可以指定图片宽度,–height指定每一个调用栈的高度,生成的火焰图,宽度越大就表示CPU耗时越多。