火焰图是什么

就是下图展示的图形

某PHP程序的On-CPU类型的火焰图例子
简而言之,就是这个图形看起来像一团跳动的火焰,这也正是名字的由来.

火焰图的作用

火焰图(flame graph)用于分析性能

火焰图该怎么看

火焰图关注哪几个部分

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

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

横向来看

  • 由于横向表示消耗的时间,所以一个格子的宽度越大越说明其可能是瓶颈

纵向来看

  • 由于纵向表示调用栈的深度,所以火焰的火苗尖部就是CPU正在执行的操作

综上

  • 主要看那些比较宽大的火苗
  • 特别是那些平头的火苗

如何生成火焰图

  • 首先要有一个Tracer工具
  • Linux的Tracer工具

    • (常用)perf工具,参考Linux Profiling at Netflix的介绍
    • systemtap,相对更强大,缺点是要学习该工具的编程语言

常见火焰图类型

常见的火焰图类型有 On-CPUOff-CPU,还有 Memory,Hot/Cold,Differential 等等

什么时候使用On-CPU,什么时候使用Off-CPU?

  • 如果是CPU则使用On-CPU火焰图
  • 如果是IO或锁则使用Off-CPU火焰图
  • 不确定该怎么办

    1. 使用压测工具看看能否让CPU使用率趋于饱和
    2. 如果不管怎么压,CPU使用率始终上不来,那么很大可能是IO或锁出问题了,此时应该用Off-CPU火焰图,否则用On-CPU
  • 还是不确定该怎么办

    • 都搞搞
    • 正常情况下两张图的差异是比较大的
    • 如果差异不大,那么有可能是CPU被其他进程抢了

参考

Blazing Performance with Flame Graphs
白话火焰图
如何读懂火焰图


zjinc36
141 声望8 粉丝

世界是辩证唯物的