1 火焰图
火焰图是性能分析的可视化工具,可以将程序的 函数调用堆栈关系 和 资源占比 两个信息可视化,常用用来做程序的CPU和内存的分析:
- 可以分析函数执行的频繁程度
- 可以分析哪些函数经常阻塞 (profile分析)
- 可以分析哪些函数频繁分配内存 (heap分析)
2 如何阅读火焰图
1、 火焰图两个作用
- 可视化函数调用链关系
- 可视化资源占比。跨度越大,占比资源(CPU/内存)越大。
2、 如何排查问题
火焰图就是看底层的哪个函数占据的宽度最大。只要有”平顶”(plateaus),就表示改函数可能存在性能问题。
这里要注意:正常情况下,程序也都是火焰图形态的,只是发生问题时,更好定位是哪个函数导致的而已
(1)如果是分析CPU,可能原因:
- 函数执行的频繁次数过高导致。
- 函数执行耗时过长
(2)如果是分析内存,可能原因
- 函数执行的频繁次数过高导致
- 频繁的分配内存
3、颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。
4、和trace区分:
trace的节点是服务粒度的。pprof的节点是函数粒度。
3 graph
graphviz是pprof另外一个视图工具,和火焰图类似也有两个作用
- 可视化函数调用链关系
- 资源占比。框越大,占比资源越大(类似火焰图每个函数占据的宽度)。
4 参考
Flame Graphs https://www.brendangregg.com/flamegraphs.html