Linux中CPU性能分析⼯具perf简单使⽤(亲测可⽤)
linux下的sleep函数⼀、背景
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:本次采样总时长(秒)
2. 数据处理
perf往往输出⼀个庞⼤的数据,⾁眼⽆法直接分析,需要借助可视化⼯具FlameGraph将数据转换位浏览器可读的svg⽂件再供⼈眼阅读。
3. ⽕焰图
X轴:被采集命中的调⽤次数,在这个⽅向上若某个帧越宽,表⽰被采样命中的次数越多,其占⽤cpu的时间也就越长。
Y轴:调⽤栈,每⼀帧代表⼀个函数调⽤,越上层的越先返回,最顶层的就是正在执⾏的,只有顶帧才具有分析价值。
注意:
1.⽤户可以⽤⿏标阅读⽕焰图中栈帧的信息,还可以进⾏⼀些简单操作。
2.⽕焰图中栈与栈帧的颜⾊没有特殊含义。
3.在X轴⽅向上,函数是按字母顺序排列的,⽽不是时间。
4. 若⽕焰图中出现平顶的栈,则说明这个栈的顶帧函数⽐较耗时,它就是性能分析的重点。
5. ⽕焰图的局限性:
1.调⽤栈很深时,perf只能返回局部的栈,不能提供完整的调⽤数据。
2.对于匿名函数,系统会以内存地址给函数命名,存在随机性,可读性差,定位困难。
三、案例实践
1. 安装perf
yum list perf
yum -y install perf.x86_64
2. 由于需要到github下载可视化分析⼯具FlameGraph,所以要先安装git
yum list git
yum -y install git.x86_64
git clone github/JaxYoun/FlameGraph.git
mv FlameGraph fg //⽅便起见,重命名FlameGraph⽬录
3. 采集、转换、可视化【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
4. 将perf.svg下载到本地⽤Chrome浏览器打开即可阅读。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论