什么是FlameGraph火焰图?怎么用?如下会为你一一解答。html
Let's Go!
1.结论
- 若是能生成出来对应图表,分析java使用cpu性能很好用。
- 可是有时生成出来的堆栈写着Unknown,没有具体堆栈信息,会比较抓狂。
如想获取更多信息请参考:https://github.com/jvm-profiling-tools/perf-map-agent/issues/44java
- Github提问题回复速度也较慢,遇到本身解决不了的问题也会比较头疼。
2.是什么?
用于量化框架中的性能,包括代码编译消耗的时间,代码缓存,其余系统类库及内核代码执行的时间,经常使用于定位cpu使用率问题。linux
3.有什么种类?
4.怎么样?

5.安装及应用呢?
FlameGraph介绍git
安装及应用步骤github
环境要求(重要)
- 操做系统centos 7.0
- cmake2.8.6或以上
- JDK8 update 60 build 19 之后,须要添加jdk启动参数:-XX:+PreserveFramePointer
- 安装perf
6.怎么看?

图表
- y轴:栈深度
- x轴:cpu时间
- 长方形:一个栈(方法)
- 长度:出如今监视器中的时长(占用cpu的时间)
- 其余:从左到右的顺序只是按字母排序,无其余意义
分析
- 从下到上:从父到子方法追查方法
- 从上到下:先找出占用最多时间的栈,找出它的进程,在图最底部,关注最宽的方法。
工具包
- perf_events:标准linux分析器,用于生成系统堆栈信息
- perf-map-agent:提供转换perf_events成带java标示的JVMTI代理
- Flame Graph:生成火焰图的工具
- Misc:生成所有java进程的堆栈信息
7.还有一些问题
- 不少java方法都是缺乏的,对比起jstack,在图里的堆栈信息可能只有1/3的深度。
- JVM动态编译(JIT)时不会暴露一个图表给系统监视器(已修复)
- JVM还使用x86上的帧指针寄存器(RBP在x86 - 64)做为一个通用寄存器