1、什么是arthas

arthas是一款开源的Java诊断工具,由阿里巴巴开发,基于开源的Byte Buddy和ASM框架,可以实时分析Java应用的运行状态,支持热部署、类加载检测、性能分析、线程调试、SQL查询等功能,可以帮助开发者快速定位问题,提高效率,减少维护成本。

2、arthas的安装

arthas的安装非常简单,可以直接下载官方提供的压缩包,解压即可使用,也可以使用brew安装:

brew update
brew tap arthas/tap
brew install arthas

安装完成后,在安装目录下的bin目录中,会有一个arthas-boot.jar文件,可以使用java命令来启动arthas:

java -jar arthas-boot.jar

3、arthas的使用

启动arthas之后,可以看到一个命令行窗口,可以输入命令来进行操作,比如查看进程:

ps

输出如下:

Process list:
PID      PPID    USER    #THR    VSS     RSS     PCY     UID      STARTED               ELAPSED    CMD
1404     1       root    1       14.2M   7.3M    S       0        2019-05-29 15:30:50  1.6m      /usr/bin/java -jar arthas-boot.jar

可以看到arthas的进程号是1404,进程名是java -jar arthas-boot.jar,可以使用attach命令来连接到arthas:

attach 1404

此时,就可以使用arthas的各种命令进行操作了,比如查看类加载情况:

sc

输出如下:

Class Name                                              Load Count  Load Class Count  Unload Class Count  Total Cost (ms)  Self Cost (ms)
org.springframework.core.io.support.PathMatchingResourcePatternResolver  1           2                  0                    0.051            0.051
org.springframework.core.io.support.ResourcePatternResolver            1           1                  0                    0.030            0.030
org.springframework.core.io.Resource                                  1           1                  0                    0.003            0.003
org.springframework.core.io.UrlResource                               0           0                  0                    0.000            0.000
org.springframework.core.io.AbstractResource                          0           0                  0                    0.000            0.000
org.springframework.core.io.FileSystemResource                        0           0                  0                    0.000            0.000
org.springframework.core.io.AbstractFileResolvingResource             0           0                  0                    0.000            0.000
org.springframework.util.ResourceUtils                                0           0                  0                    0.000            0.000
org.springframework.util.ClassUtils                                   0           0                  0                    0.000            0.000
org.springframework.util.ReflectionUtils                              0           0                  0                    0.000            0.000

可以看到,类加载情况,包括加载次数、加载类数、卸载类数等信息。