标签:案例 没有 github 本地 命名 系统 文件 可视化 需要
Linux系统出现性能瓶颈时,往往因个别函数长时间占用CPU造成,解决问题的第一步就是定位到引起问题的函数,perf就是这样的工具,它是Linux内核源码提供的工具。
sudo perf record -F 99 -p 13204 -g -- sleep 30
# record 表示记录cpu的执行数据
# -F:采样频率(次/秒)
# -p:进程号
# -g:输出调用栈数据
# -- sleep:本次采样总时长(秒)
数据处理
perf往往输出一个庞大的数据,肉眼无法直接分析,需要借助可视化工具FlameGraph将数据转换位浏览器可读的svg文件再供人眼阅读。
火焰图
X轴:被采集命中的调用次数,在这个方向上若某个帧越宽,表示被采样命中的次数越多,其占用cpu的时间也就越长。
Y轴:调用栈,每一帧代表一个函数调用,越上层的越先返回,最顶层的就是正在执行的,只有顶帧才具有分析价值。
注意:
1.用户可以用鼠标阅读火焰图中栈帧的信息,还可以进行一些简单操作。
2.火焰图中栈与栈帧的颜色没有特殊含义。
3.在X轴方向上,函数是按字母顺序排列的,而不是时间。
1.调用栈很深时,perf只能返回局部的栈,不能提供完整的调用数据。
2.对于匿名函数,系统会以内存地址给函数命名,存在随机性,可读性差,定位困难。
yum list perf
yum -y install perf.x86_64
yum list git
yum -y install git.x86_64
git clone https://github.com/JaxYoun/FlameGraph.git
mv FlameGraph fg //方便起见,重命名FlameGraph目录
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
标签:案例 没有 github 本地 命名 系统 文件 可视化 需要
原文地址:https://www.cnblogs.com/JaxYoun/p/12817867.html