Linux性能分析工具perf和火焰图使用方法

火焰图

on-cpu火焰图可以用于分析cpu是被哪些线程、哪些函数占用的,可以方便的找到热点代码便于后续分析优化。下面我们介绍下火焰图的生成和使用方法。

使用方法

  1. 准备FlameGraph工具。
git clone https://github.com/brendangregg/FlameGraph.git
  1. 用perf record采集CPU信息。
perf record -e cpu-clock -g  ./perf_test

Ctrl+c结束执行后,在当前目录下会生成采样数据perf.data。

  1. 用perf script工具对perf.data进行解析。
perf script -i perf.data &> perf.unfold
  1. 将perf.unfold中的符号进行折叠。
./stackcollapse-perf.pl perf.unfold &> perf.folded
  1. 最后生成svg图。
./flamegraph.pl perf.folded > perf.svg

perf.svg 用浏览器就可以打开

 

火焰图解读

y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。

x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。

火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。比如图中的longa()函数正是问题所在点。

颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。

你可能感兴趣的:(linux,linux,性能优化)