Linux之perf性能分析(⽕焰图)项⽬开发的程序,运⾏定位问题⽅法很多,这⾥介绍使⽤perf软件查看程序问题1.使⽤perf采样
1.直接使⽤perf启动服务
# perf record -g ls
--------------------------------
2.挂接到已启动的进程
# 使⽤PID监控程序
# sudo perf record -e cpu-clock -g -p pid
# 如果svg图出现unknown函数,使⽤如下
# sudo perf record -e cpu-clock --call-graph dwarf -p pid
# 使⽤程序名监控程序
# sudo perf record -e cpu-clock -g -p `pgrep your_program`
------------------------------------
第⼀种⽅式不需要root权限,第⼆种⽅式需要root权限
使⽤ctrl+c中断perf进程,或者在命令最后加上参数 --sleep n (n秒后停⽌)
perf record表⽰记录到⽂件,perf top直接会显⽰到界⾯
如果record之后想直接输出结果,使⽤perf report即可
2.从github下载分析脚本
3.⽤perf script⼯具对perf.data进⾏解析
sudo perf script -i perf.data &> perf.unfold
4.将perf.unfold中的符号进⾏折叠
FlameGraph/stackcollapse-perf.pl perf.unfold &> perf.folded
5.最后⽣成svg图
FlameGraph/flamegraph.pl perf.folded > perf.svg
6.使⽤浏览器查看svg图⽚
如何分析
y 轴表⽰调⽤栈,每⼀层都是⼀个函数。调⽤栈越深,⽕焰就越⾼,顶部就是正在执⾏的函数,下⽅都是它的⽗函数。
x 轴表⽰抽样数,如果⼀个函数在 x 轴占据的宽度越宽,就表⽰它被抽到的次数多,即执⾏的时间长。注意,x 轴不代表时间,⽽是所有的调⽤栈合并后,按字母顺序排列的。
⽕焰图就是看顶层的哪个函数占据的宽度最⼤。只要有"平顶"(plateaus),就表⽰该函数可能存在性能问题。svg图
颜⾊没有特殊含义,因为⽕焰图表⽰的是 CPU 的繁忙程度,所以⼀般选择暖⾊调。
8.修改代码之后,⽐较修改前后perf产⽣的结果差异
perf diff perf.data perf.data.before

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。