原创

如何看懂火焰图

如何看懂火焰图

火焰图官方主页

什么是火焰图

火焰图(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/

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何看懂火焰图

    火焰图(Flame Graph)是由 Linux 性能优化大师 Brendan Gregg 发明的,和所有其他的 profiling 方法不同的是,火焰图以一个...

    王小明_HIT
  • 如何读懂火焰图?

    来源:阮一峰的博客 www.ruanyifeng.com/blog/2017/09/flame-graph.html 软件的性能分析,往往需要查看 CPU 耗...

    顶级程序员
  • 如何读懂火焰图?

    软件的性能分析,往往需要查看 CPU 耗时,了解瓶颈在哪里。 火焰图(flame graph)是性能分析的利器。本文介绍它的基本用法。 ? 一、perf 命令 ...

    ruanyf
  • 如何读懂火焰图?

    让我们从 perf 命令(performance 的缩写)讲起,它是 Linux 系统原生提供的性能分析工具,会返回 CPU 正在执行的函数名以及调用栈(sta...

    疯狂的技术宅
  • 如何生成 Flink 作业的交互式火焰图?

    Flink 是目前最流行的大数据及流式计算框架之一,用户可以使用 Java/Scala/Python 的DataStream 接口或者标准 SQL 语言来快速...

    zhisheng
  • 【Node.js丨主题周】理解perf 与火焰图

    火焰图(Flame Graph)看起来就像一团跳动的火焰,因此得名,它可以将 CPU 的使用情况可视化,使我们直观地了解到程序的性能瓶颈。我们通常要结合操作系统...

    博文视点Broadview
  • JDK11现存性能bug(JDK-8221393)深度解析

    这是一篇鸽了很久的博客,因为博客内容和素材早就准备差不多了,但就是一直懒得整理,今天终于下定决心终于整理出来了,这也是这个bug JDK-8221393唯一一篇...

    xindoo
  • 用 VSCode 调试网页的 JS 代码有多香

    相比纯看代码来说,我更推荐结合 debugger 来看,它可以让我们看到代码实际的执行路线,每一个变量的变化。可以大段大段代码跳着看,也可以对某段逻辑一步步的执...

    lingxiaoguang
  • cpu分析利器 — async-profiler

    async-profiler是一款采集分析java性能的工具,翻译一下github上的项目介绍:

    龟仙老人
  • 程序员精进之路:性能调优利器--火焰图

    ? 作者:厉辉,腾讯 CSIG 后台开发工程师 本文主要分享火焰图使用技巧,介绍 systemtap 的原理机制,如何使用火焰图快速定位性能问题原因,同时加深...

    腾讯技术工程官方号
  • 怎么将Tideways的日志数据生成火焰图?

    之前的一篇文章说了怎么安装Tideways和Toolkit对PHP代码进行性能分析

    沈唁
  • 性能调优工具-火焰图

    工具的进化一直是人类生产力进步的标志,合理使用工具能大大提高我们的工作效率,遇到问题时,合理使用工具更能加快问题排查的进度。这也是我为什么非常喜欢 shell ...

    枕边书
  • CSS 火焰?不在话下

    嗯,长什么样子?在 CodePen 上输入关键字 CSS Fire,能找到这样的:

    Sb_Coco
  • 性能测试系列五 压测常见的关注指标以及监控分析工具

    前面的文章,我们分析了压测的时机,压测的指标,那么这次呢,我们来看下,我们这些压测的指标,常见的都需要性能压测中观测点,有了对指标的梳理...

    雷子
  • Linux下systemtap和火焰图介绍及安装

    SystemTap 是对 Linux 内核监控和跟踪的工具,详细的介绍及说明见官网。

    用户8705059
  • 用CPI火焰图分析Linux性能问题

    本文中若有任何疏漏错误,有任何建议和意见,请回复内核月谈微信公众号,或通过 oliver.yang at linux.alibaba.com 反馈。

    Linux阅码场
  • 在瀑布下用火焰烤饼:三步法助你快速定位网站性能问题(超详细)

    接下来给大家分享我自己在定位业务性能问题时常用的三步法,为了方便记忆,我把它总结为一句话:

    DevUI团队
  • NodeJS 性能优化之 CPU 看图篇

    作为前端出身的 NodeJS 开发者们,产生共鸣的那就是如何能够直观且快速发现性能瓶颈,能够像调试前端的 JS 代码那样可视化,堆栈化,接下来我们就针对常见的 ...

    web爱好者
  • Windows on Device 项目实践 3 - 火焰报警器制作

    在前两篇《Windows on Device 项目实践 1 - PWM调光灯制作》和《Windows on Device 项目实践 2 - 感光灯制作》中,我们...

    ShiJiong

扫码关注云+社区

领取腾讯云代金券