# 如何读懂火焰图(Flame Graph)
文末的参考文章说的已经很清楚了,我这里简单做个总结。
## 原理
火焰图就是CPU的抽样图。
系统定期抽样(通常频率是99Hz,即每秒99次),基于函数调用堆栈来画抽样图。
- y轴代表方法的调用栈,越高代表方法堆栈深度越深;
- x轴代表被抽样的次数(注意:不是时间),越宽代表该方法栈消耗的CPU次数越多。
### 示例
假设一定的抽样时间内,e()和i()都执行了一次,而g()执行了2次,则下图就是方法调用火焰图
![火焰图示例](https://oss.yeas.fun/halo-yeas/flame-graph1_1640182522237.png)
## 怎么看?
所以:火焰图就看最上面的方法哪个函数占用的宽度最大(平顶),就代表被抽样的次数最多,也就表示这个函数占用CPU最多,最有可能存在性能问题。
## 在哪看?
- arthas框架中支持对应用生成火焰图
- Java中开启Java Flight Recorder(JFR),也可通过Java Mission Control (JMC)工具查看火焰图,且性能消耗较小
## 文章参考
https://www.ruanyifeng.com/blog/2017/09/flame-graph.html
如何读懂火焰图(Flame Graph)