0%

火焰图

命令

1
2
3
4
perf record -F 99 -p [pid] -g -- sleep 60
perf script > out.perf
./stackcollapse-perf.pl out.perf > out.folded
./flamegraph.pl out.folded > out.svg

命令的解释:

  • perf record: 启动perf的记录模式,用于收集性能数据。

  • -F 99: 设置记录事件的采样频率。在这里,设置为99,表示每秒进行99次采样。采样频率的选择依赖于需要捕获的性能信息以及对性能开销的容忍度。

  • -p 13204: 指定要监视的进程的PID(进程ID)。在这个例子中,监视的是PID为13204的进程。

  • -g: 启用调用图跟踪,收集函数调用堆栈信息。这对于分析程序的性能瓶颈和理解函数之间的调用关系非常有用。

  • --: 表示后面的参数是要执行的命令。在这里,是sleep 30,即使perf工具在后台运行,记录了30秒的性能数据。

  • perf script > out.perf: 将收集到的数据转换为可读的文本格式。

  • ./stackcollapse-perf.pl out.perf > out.folded: 生成stack。

  • ./flamegraph.pl out.folded > out.svg: 生成火焰图

perf 做了什么事

可以简单的理解perf是一个采样工具,对CPU正在执行的函数,以及当前的函数堆栈(stack), 进行采样。
perf是怎么做这件事的呢? 我猜测是通过读取/proc/[pid]下的内容,进行统计,监控。

FlameGraph是解释型语言Perl写的。所以无需安装,只需要下载源代码,就可以执行。

参考