perf及火焰图的使用,性能分析

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

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值