火焰图(FlameGraph)的简单学习

=Start=

缘由:

最近在对内部一些项目做性能压测的过程中简单接触了一下「火焰图」的概念。这里简单记录一下,方便以后快速参考。

正文:

参考解答:
# 火焰图是什么?

火焰图 是基于 perf命令结果 产生的 SVG图片,用来展示 CPU 的调用栈。

# 火焰图怎么看?
  • Y轴 表示 调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数;
  • X轴 表示 抽样数如果一个函数在 X轴 占据的宽度越宽,就表示它被抽到的次数越多,即执行的时间长。

火焰图里面的颜色是随机选取的,并没有特殊含义。

火焰图主要就是看顶层的哪个函数占据的宽度最大。只要有”平顶”(plateaus),就表示该函数可能存在性能问题。

# 如何生成火焰图?

下面以一个简单的C程序为例,介绍一下火焰图的生成流程:

&

 

参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4053.html

《火焰图(FlameGraph)的简单学习》上有3条评论

  1. 全链路压测平台(Quake)在美团中的实践
    https://mp.weixin.qq.com/s/7kKhAYtkIuvlBnZlaYATnw

    压测的作用:
    验证峰值流量下服务的稳定性和伸缩性。
    验证新上线功能的稳定性。
    进行降级、报警等故障演练。
    对线上服务进行更准确的容量评估。
    ……

    全链路压测是基于线上真实环境和实际业务场景,通过模拟海量的用户请求,来对整个系统进行压力测试。早期,我们在没有全链路压测的情况下,主要的压测方式有:
    · 对线上的单机或集群发起服务调用。
    · 将线上流量进行录制,然后在单台机器上进行回放。
    · 通过修改权重的方式进行引流压测。

    但以上方式很难全面的对整个服务集群进行压测,如果以局部结果推算整个集群的健康状况,往往会“以偏概全”,无法评估整个系统的真实性能水平,主要的原因包括:
    · 只关注涉及的核心系统,无法覆盖到所有的环节。
    · 系统之间都是通过一些基础服务进行串联,如 Nginx、Redis 缓存、数据库、磁盘、网络等等,而基础服务问题在单机压测中往往不能被暴露出来。

    自研解决方案要具备的能力:
    提供模拟线上真实流量的能力
    具备快速创建压测环境的能力
    支持多种压测类型
    提供压测过程的实时监控与过载保护

发表评论

电子邮件地址不会被公开。 必填项已用*标注