前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何看懂火焰图

如何看懂火焰图

原创
作者头像
王小明_HIT
修改2021-09-07 10:51:33
11.9K0
修改2021-09-07 10:51:33
举报

如何看懂火焰图

火焰图官方主页

什么是火焰图

火焰图(Flame Graph)是由 Linux 性能优化大师 Brendan Gregg 发明的,和所有其他的 profiling 方法不同的是,火焰图以一个全局的视野来看待时间分布,它从底部往顶部,列出所有可能导致性能瓶颈的调用栈。

火焰图 svg 文件可以通过浏览器打开,它对于调用图的优点是:可以通过点击每个方块来分析它上面的内容。

火焰图的调用顺序从下到上,每个方块代表一个函数,它上面一层表示这个函数会调用哪些函数,方块的大小代表了占用 CPU 使用的长短。火焰图的配色并没有特殊的意义,默认的红、黄配色是为了更像火焰而已。

火焰图特征

  • 每一列代表一个调用栈,每一个格子代表一个函数
  • 纵轴展示了栈的深度,按照调用关系从下到上排列。最顶上格子代表采样时,正在占用 cpu 的函数。
  • 横轴的意义是指:火焰图将采集的多个调用栈信息,通过按字母横向排序的方式将众多信息聚合在一起。需要注意的是它并不代表时间。
  • 横轴格子的宽度代表其在采样中出现频率,所以一个格子的宽度越大,说明它是瓶颈原因的可能性就越大。
  • 火焰图格子的颜色是随机的暖色调,方便区分各个调用信息。
  • 其他的采样方式也可以使用火焰图, on-cpu 火焰图横轴是指 cpu 占用时间,off-cpu 火焰图横轴则代表阻塞时间。
  • 采样可以是单线程、多线程、多进程甚至是多 host

火焰的每一层都会标注函数名,鼠标悬浮时会显示完整的函数名、抽样抽中的次数、占据总抽样次数的百分比。下面是一个例子。

在某一层点击,火焰图会水平放大,该层会占据所有宽度,显示详细信息。

按下 Ctrl + F 会显示一个搜索框,用户可以输入关键词或正则表达式,所有符合条件的函数名会高亮显示。

总的来说

  • 颜色本身没有什么意义
  • 纵向表示调用栈的深度
  • 横向表示消耗的时间

上述几个部分分别体现什么

横向来看
  • 由于横向表示消耗的时间,所以一个格子的宽度越大越说明其可能是瓶颈
纵向来看
  • 由于纵向表示调用栈的深度,所以火焰的火苗尖部就是CPU正在执行的操作
综上
  • 主要看那些比较宽大的火苗
  • 特别是那些平头的火苗

火焰图类型

欢迎关注公众号:程序员财富自由之路

参考资料
  • https://juejin.cn/post/6844903802378649607
  • https://segmentfault.com/a/1190000017962911
  • https://juejin.cn/post/6986437088337985572
  • https://www.ruanyifeng.com/blog/2017/09/flame-graph.html
  • https://mp.weixin.qq.com/s?__biz=MzAxMTA4Njc0OQ==&mid=2651439006&idx=1&sn=0db8849336cc4172c663a574212ea8db&chksm=80bb616cb7cce87a1dc529e6c8bdcf770e293fc4ce67ede8e1908199480534c39f79803038e3&scene=21#wechat_redirect
  • https://jishuin.proginn.com/p/763bfbd37ae2
  • https://www.infoq.cn/article/a8kmnxdhbwmzxzsytlga
  • https://juejin.cn/post/6986437088337985572
  • https://www.cnblogs.com/qcrao-2018/p/11832732.html
  • http://guileen.github.io/2016/06/15/how-did-i-optimize-golang-gc/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何看懂火焰图
    • 什么是火焰图
      • 火焰图特征
        • 上述几个部分分别体现什么
          • 横向来看
          • 纵向来看
          • 综上
        • 火焰图类型
          • 欢迎关注公众号:程序员财富自由之路
          • 参考资料
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档