下载与安装

在线安装

通过wget或curl命令访问如下的url以下载Arthas的启动程序:

https://arthas.aliyun.com/arthas-boot.jar

访问命令如下:

wget https://arthas.aliyun.com/arthas-boot.jar
或
curl -O https://arthas.aliyun.com/arthas-boot.jar

下载完成后,在当前目录即有arthas-boot.jar文件,该文件是arthas的启动程序,而非arthas本身。

执行如下命令运行arthas-boot.jar文件后,将直接下载arthas所需的运行程序:

java -jar arthas-boot.jar

完成下载并成功启动后,选择需要诊断的目标进程,attach成功后控制台将显示如下信息:

img

需要注意的是,arthas与目标进程须具备相同的用户权限,否则在运行过程中可能出现访问权限相关的问题。

离线安装

上述在线安装过程中,arthas运行程序的获取是通过arthas-boot.jar直接在当前机器下载的。

在实际场景中,如果当前机器无法连接外网,可通过在其他机器上下载好arthas后打包上传到当前机器。

在联网机器上运行arthas-boot.jar后,可在控制到查看到下述日志:

[INFO] arthas home: /Users/herman/.arthas/lib/3.5.5/arthas

该日志显示的是arthas运行程序的安装目录,将该目录直接打包,连同arthas-boot.jar一起上传到待诊断程序所在的目标机器。

arthas-boot.jar在目标机器上的位置不作要求,可放置于任意位置。

arthas运行程序包解压后,须放在服务器上的用户根目录下,比如herman用户,放在/home/herman/.arthas下即可。

使用

启动

运行arthas-boot.jar后,控制台将会显示当前机器上正在运行的java程序列表。

选择目标进程,输入对应的序号并输入回车即可进入对该进程的监控。

需要注意的是,arthas与目标进程须具备相同的用户权限,否则在运行过程中可能会attach失败。

Dashboard

进入监控后,输入dashboard命令,即可看到整个进程的概况。输入Q或Ctrl+c可退出预览。

在显示的面板中,可以看到如下的信息:

  1. 进程内的线程概况:线程运行时间,线程运行状态等

  2. 进程的内存使用概况:例如堆内和堆外内存使用情况,新生代、老年代等堆空间占用情况

  3. 运行环境信息:操作系统版本、JDK版本等

Profiler

profiler 命令支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。

注意,linux系统支持所有profiler功能,mac系统支持部分功能,windows系统不支持profiler功能。

常用的profiler指令如下:

#开始抽样,-e可用于指定抽样的event,可以是cpu或alloc
profiler start -e cpu
​
#查看抽样任务执行的时间
profiler status
​
#查看抽样任务的抽样数量
profiler getSamples
​
#结束抽样,并将结果的火焰图输出为html格式,--file可指定输出的文件
profiler stop --format html --file /mnt/d/arthas/cpu.html


抽样任务输出火焰图后,就要基于火焰图进行分析。

y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。

x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。

火焰图里,横条越长,代表使用的越多,从下到上是调用堆栈信息。

火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。

CPU抽样

启动一次CPU抽样任务,执行一段时间后即可关闭,并输出结果火焰图。

profiler start -e cpu
profiler stop --format html --file /mnt/d/arthas/cpu.html

下图展示了一次简单的客户端单线程写入,IoTDB运行过程中某一段时间的CPU抽样片段。

在CPU抽样的火焰图中,横条表示函数,其长度表示执行时间,越宽表示被调用越多执行时间长,越高表示调用栈越深。

profiler生成的火焰图html文件支持点击放大操作,下图仅展示了整体的概况;如需查看具体的函数调用栈,可点击对应的横条。


内存抽样

进行内存分析时,堆分析器需要HotSpot调试符号,Oracle JDK已经将它们嵌入到libjvm.so中,但是OpenJDK在构建时,被打包到了单独的包中。

因此在使用内存抽样之前,需安装OpenJDK调试符号:

apt install openjdk-8-dbg


启动一次CPU抽样任务,执行一段时间后即可关闭,并输出结果火焰图。

profiler start -e alloc
profiler stop --format html --file /mnt/d/arthas/alloc.html

下图展示了一次简单的客户端单线程写入,IoTDB运行过程中某一段时间的内存抽样片段。

在内存抽样的火焰图中,横条表示函数,其宽度表示执行时分配的空间,越宽表示分配的空间越多,越高表示调用栈越深。

参考

Arthas 应用诊断利器 (aliyun.com)

arthas无网络环境下离线安装方法 - 这个名字想了很久~ - 博客园 (cnblogs.com)

arthas火焰图性能分析 - 掘金 (juejin.cn)

Async-profiler介绍_冯立彬的博客-CSDN博客_async-profiler


  • No labels