作用:软件性能优化,瓶颈分析。
FlameGraph工具下载:网站。
需要有perf工具:在内核中编译,后将二进制文件放到/usr/local/bin/目录。
火焰图分类:好几种,分On-CPU,Off-CPU,还有 Memory,Hot/Cold,Differential 等等,根据处理的场景不同做区分
火焰图怎么生成:
- perf record -C 1 -F 99 -g – sleep 20 >> pref.data
-F 99 表示每秒 99 次(如果-e cpu-clock就是用CPU时钟周期,这样采集的要大很多)
-p 13204 是进程号
-g 表示记录调用栈
sleep 30 则是持续 30 秒 - perf script 工具对 perf.data 进行解析, 生成折叠后的调用栈
perf script -i perf.data &> perf.unfold
后把文件拷贝到FlameGraph工程目录。 - ./stackcollapse-perf.pl perf.unfold > perf.folded 生成火焰图
- ./flamegraph.pl perf.folded > out.svg 生成svg
其中我遇到了几个问题,在执行后面两步的过程中遇到了缺少库的问题,把最后的步骤更换到其他服务器上解决了。
火焰图分析方法:
1、纵轴代表调用栈的深度(栈桢数),用于表示函数间调用关系:下面的函数是上面函数的父函数。
2、横轴代表调用频次,一个格子的宽度越大,越说明其可能是瓶颈原因。
3、不同类型火焰图适合优化的场景不同,比如 on-cpu 火焰图适合分析 cpu 占用高的问题函数,off-cpu 火焰图适合解决阻塞和锁抢占问题。
4、无意义的事情:横向先后顺序是为了聚合,跟函数间依赖或调用关系无关;火焰图各种颜色是为方便区分,本身不具有特殊含义
学习网站:
https://zhuanlan.zhihu.com/p/402188023