火焰图解析
火焰图解析
火焰图(flame graph)是性能分析的利器,是基于

y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。x 轴表示抽样数,如果一个函数在x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。
火焰图就是看顶层的哪个函数占据的宽度最大。只要有
互动性
火焰图是
(1)鼠标悬浮
火焰的每一层都会标注函数名,鼠标悬浮时会显示完整的函数名、抽样抽中的次数、占据总抽样次数的百分比。下面是一个例子。
mysqld'JOIN::exec (272,959 samples, 78.34 percent)
(2)点击放大
在某一层点击,火焰图会水平放大,该层会占据所有宽度,显示详细信息。

左上角会同时显示
(3)搜索
按下
火焰图示例
下面是一个简化的火焰图例子。首先,
func_c
func_b
func_a
start_thread
func_d
func_a
start_thread
func_d
func_a
start_thread
上面代码中,
start_thread;func_a;func_b;func_c 1
start_thread;func_a;func_d 2
有了这个调用栈统计,火焰图工具就能生成

上面图片中,最顶层的函数
局限
两种情况下,无法画出火焰图,需要修正系统行为。
(1)调用栈不完整
当调用栈过深时,某些系统只返回前面的一部分(比如前
(2)函数名缺失
有些函数没有名字,编译器只用内存地址来表示(比如匿名函数
浏览器的火焰图

浏览器的火焰图与标准火焰图有两点差异:它是倒置的(即调用栈最顶端的函数在最下方
