### 1、下载安装
---
```shell
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
```
就可以启动起来。启动后,authas会自动检测存在的java进程,这时候需要选择你想要诊断的进程,回车即可。
### 2、什么叫火焰图
---
[火焰图](http://www.brendangregg.com/flamegraphs.html)是性能分析的利器
![火焰图.jpg](http://114.115.171.234:80/upload/2021/07/%E7%81%AB%E7%84%B0%E5%9B%BE-7b34b9dfa24a41cb91d6ad800f8dd4e1.jpg)
```
y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。
x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。
火焰图就是看哪个函数占据的宽度最大。宽度越大 证明采样越多,即函数执行时间越长。就表示该函数可能存在性能问题。
颜色没有特殊含义。
```
### 3、Arthas打印火焰图
---
```shell
# 启动profiler,默认启动的是对CPU的收集。可以分析一个系统中性能耗时,占用时间比较多的方法。
$ profiler start
# 也可以使用--event参数指定要采样的事件。例如:对内存进行分析
$ profiler start --event alloc
# 可以使用list命令看对event的支持。
$ profiler list
# 查看profiler状态
$ profiler status
# 关闭peofiler并导出文件
$ profiler stop --file /tmp/output.svg
```
### 4、火焰图的互动性
---
**4.1 鼠标悬浮**
火焰的每一层都会标注函数名,鼠标悬浮时会显示完整的函数名、抽样抽中的次数、占据总抽样次数的百分比,例如:
` mysqld'JOIN::exec (272,959 samples, 78.34 percent) `
**4.2 点击放大**
在某一层点击,火焰图会水平放大,该层会占据所有宽度,显示详细信息。
![点击放大.png](http://114.115.171.234:80/upload/2021/07/%E7%82%B9%E5%87%BB%E6%94%BE%E5%A4%A7-7a3d0c07c99f4a4ead5977d4ec0ab920.png)
左上角会同时显示"Reset Zoom",点击该链接,图片就会恢复原样。
**4.3 Search**
右上点击`Search` 显示一个搜索框,用户可以输入关键词或正则表达式,所有符合条件的函数名会高亮显示。
### 5、参考链接
---
[如何读懂火焰图?](http://www.ruanyifeng.com/blog/2017/09/flame-graph.html)
[JVM那点事—火焰图(flame graph)性能分析](https://www.jianshu.com/p/ce292632a8ef)
Arthas:火焰图分析java应用