一 Arthas的作用
1.1 作用
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
2.是否有一个全局视角来查看系统的运行状况?
-
有什么办法可以监控到JVM的实时运行状态?
-
怎么快速定位应用的热点,生成火焰图?
二 安装操作
2.1 linux的安装
下载arthas-boot.jar 然后运行 java -jar 的方式启动
2.2 windows的安装
在c:\下创建目录arthas,在windows命令窗口下,使用curl命令下载阿里服务器上的jar包,大小约诶108k。
- 使用java启动arthas-boot.jar,来安装arthas,大小约10M。运行此命令会发现java进程,输入1
按回车。则自动从远程主机上下载arthas到本地目录
3.查看安装目录
三 常用操作
3.1 操作api
输入dashboard命令
输入thread命令
输入monitor命令
四 通过arthas生成火焰图
4.1 profile命令
profiler 命令支持生成应用热点的火焰图。本质上是 通过不断的采样,然后把收集到的采样结果生成火焰图。
4.2 火焰图的解析
y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高**,顶部就是正在执行的函数,下方都是它的父函数。**
x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。
火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。
颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。
最顶层的函数g()占用 CPU 时间最多。d()的宽度最大,但是它直接耗用 CPU 的部分很少。b()和c()没有直接消耗 CPU。因此,如果要调查性能问题,首先应该调查g(),其次是i()。
另外,从图中可知a()有两个分支b()和h(),这表明a()里面可能有一个条件语句,而b()分支消耗的 CPU 大大高于h()。
Arthas profiler(使用async-profiler对应用采样,生成火焰图)_51CTO博客_async.art
4.3 常用命令
1.常用命令
2.操作命令
1启动profiler,默认情况下,生成的是 cpu 的火焰图,即 event 为cpu。可以用--event参数指定其他性能分析模式,见下文。
$ profiler start
Started [cpu] profiling
2.显示支持的事件
profiler list
3.获取已采集的sample的数量
$ profiler getSamples
23
4.查看profiler状态(可以查看当前profiler在采样哪种event和采样时间。
$ profiler status
[cpu] profiling is running for 4 seconds
5.停止profiler,并同步生成文件(默认在工作目录下的arthas-output目录。)
$ profiler stop
profiler output file: /tmp/demo/arthas-output/20240919-155147.svg
通过 --file参数来指定输出结果路径,在--file参数指定的文件名后缀为 html 或 jfr 时,文件格式可以被推断出来。比如--file /tmp/result.html 将自动生成火焰图。
指定生成的文件名以及路径
profiler stop --file /tmp/result.svg
6.生成html文件
可以用--format指定生成格式,默认情况下,结果是 Flame Graph格式的 html 文件,也可以用 -o 或 --format 参数指定其他内容格式,包括 flat、traces、collapsed、flamegraph、tree、jfr。
profiler stop --format html