火焰图是什么
就是下图展示的图形
简而言之,就是这个图形看起来像一团跳动的火焰,这也正是名字的由来.
火焰图的作用
火焰图(flame graph)用于分析性能
火焰图该怎么看
火焰图关注哪几个部分
- 颜色本身没有什么意义
- 纵向表示调用栈的深度
- 横向表示消耗的时间
上述几个部分分别体现什么
横向来看
- 由于横向表示消耗的时间,所以一个格子的宽度越大越说明其可能是瓶颈
纵向来看
- 由于纵向表示调用栈的深度,所以火焰的火苗尖部就是CPU正在执行的操作
综上
- 主要看那些比较宽大的火苗
- 特别是那些平头的火苗
如何生成火焰图
- 首先要有一个Tracer工具
-
Linux的Tracer工具
- (常用)perf工具,参考的介绍
- systemtap,相对更强大,缺点是要学习该工具的编程语言
常见火焰图类型
常见的火焰图类型有 ,,还有 Memory,Hot/Cold,Differential 等等
什么时候使用On-CPU,什么时候使用Off-CPU?
- 如果是CPU则使用On-CPU火焰图
- 如果是IO或锁则使用Off-CPU火焰图
-
不确定该怎么办
- 使用压测工具看看能否让CPU使用率趋于饱和
- 如果不管怎么压,CPU使用率始终上不来,那么很大可能是IO或锁出问题了,此时应该用Off-CPU火焰图,否则用On-CPU
-
还是不确定该怎么办
- 都搞搞
- 正常情况下两张图的差异是比较大的
- 如果差异不大,那么有可能是CPU被其他进程抢了