1:perf
perf是一个性能分析工具,
systemtap是一個运行时程序或系统信息采集工具,使用前需要了解其动态追踪语言,(了解动态追踪:https://blog.csdn.net/wm_1991/article/details/51982617), systemtap功能强大,但是学习成本也高,用于分析复杂问题。
2:perf下载
https://centos.pkgs.org/
下载系统对应版本rpm的二进制文件包,很方便安装。
3:perf使用
A:信息采集
sudo perf record -e cpu-clock -g -p PID
-g 选项是告诉perf record额外记录函数的调用关系
-e cpu-clock 指perf record监控的指标为cpu周期
-p 指定需要record的进程pid
B:信息解析
sudo perf script -i perf.data > perf.unfold
4:解析出来的文件其实也不够直观,这是可以使用火焰图生成工具,这里做出来的是on-cpu火焰图
火焰图git: https://github.com/brendangregg/FlameGraph
C:信息折叠
sudo ./FlameGraph/stackcollapse-perf.pl perf.unfold > perf.folded
D:生成火焰图
sudo ./FlameGraph/flamegraph.pl perf.folded > perf.svg
5:火焰图的含义
火焰图是基于 stack 信息生成的 SVG 图片, 用来展示 CPU 的调用栈。
y 轴表示调用栈, 每一层都是一个函数. 调用栈越深, 火焰就越高, 顶部就是正在执行的函数, 下方都是它的父函数.
x 轴表示抽样数, 如果一个函数在 x 轴占据的宽度越宽, 就表示它被抽到的次数多, 即执行的时间长. 注意, x 轴不代表时间, 而是所有的调用栈合并后, 按字母顺序排列的.
火焰图就是看顶层的哪个函数占据的宽度最大. 只要有 “平顶”(plateaus), 就表示该函数可能存在性能问题。
颜色没有特殊含义, 因为火焰图表示的是 CPU 的繁忙程度, 所以一般选择暖色调.
6:火焰图使用
火焰图是 SVG 图片, 可以与用户互动.
鼠标悬浮
火焰的每一层都会标注函数名, 鼠标悬浮时会显示完整的函数名、抽样抽中的次数、占据总抽样次数的百分比
点击放大
在某一层点击,火焰图会水平放大,该层会占据所有宽度,显示详细信息。
左上角会同时显示 “Reset Zoom”, 点击该链接, 图片就会恢复原样.
搜索
按下 Ctrl + F 会显示一个搜索框,用户可以输入关键词或正则表达式,所有符合条件的函数名会高亮显示.
参考:
https://blog.csdn.net/gatieme/article/details/78885908
http://www.ruanyifeng.com/blog/2017/09/flame-graph.html
https://github.com/brendangregg/FlameGraph
扩展,高性能调试经验分享—来源:知乎
https://zhuanlan.zhihu.com/p/21348220