Linux中CPU性能分析工具perf简单使用(亲测可用)

一、背景

Linux系统出现性能瓶颈时,往往因个别函数长时间占用CPU造成,解决问题的第一步就是定位到引起问题的函数,perf就是这样的工具,它是Linux内核源码提供的工具。

二、核心概念

  1. 数据采集
    perf通过采样的方式,记录CPU正在执行的函数名及函数的调用栈,通常采样频率是每秒99次,perf的数据采集有额外性能开销,所以不宜长时间使用。
    perf命令说明:
sudo perf record -F 99 -p 13204 -g -- sleep 30
# record 表示记录cpu的执行数据
# -F:采样频率(次/秒)
# -p:进程号
# -g:输出调用栈数据
# -- sleep:本次采样总时长(秒)
  1. 数据处理
    perf往往输出一个庞大的数据,肉眼无法直接分析,需要借助可视化工具FlameGraph将数据转换位浏览器可读的svg文件再供人眼阅读。

  2. 火焰图
    X轴:被采集命中的调用次数,在这个方向上若某个帧越宽,表示被采样命中的次数越多,其占用cpu的时间也就越长。
    Y轴:调用栈,每一帧代表一个函数调用,越上层的越先返回,最顶层的就是正在执行的,只有顶帧才具有分析价值
    注意:

1.用户可以用鼠标阅读火焰图中栈帧的信息,还可以进行一些简单操作。
2.火焰图中栈与栈帧的颜色没有特殊含义。
3.在X轴方向上,函数是按字母顺序排列的,而不是时间。

  1. 若火焰图中出现平顶的栈,则说明这个栈的顶帧函数比较耗时,它就是性能分析的重点。
  2. 火焰图的局限性:

1.调用栈很深时,perf只能返回局部的栈,不能提供完整的调用数据。
2.对于匿名函数,系统会以内存地址给函数命名,存在随机性,可读性差,定位困难。

三、案例实践

  1. 安装perf
yum list perf
yum -y install perf.x86_64
  1. 由于需要到github下载可视化分析工具FlameGraph,所以要先安装git
yum list git
yum -y install git.x86_64
git clone https://github.com/JaxYoun/FlameGraph.git
mv FlameGraph fg  //方便起见,重命名FlameGraph目录
  1. 采集、转换、可视化【root权限】
perf record -F 99 -p 18733 -g -- sleep 30
perf script -i perf.data &> perf.unfold
fg/stackcollapse-perf.pl perf.unfold &> perf.folded
fg/flamegraph.pl perf.folded > perf.svg
  1. 将perf.svg下载到本地用Chrome浏览器打开即可阅读。

猜你喜欢

转载自www.cnblogs.com/JaxYoun/p/12817867.html