Arthas是Alibaba开源的一款Java诊断工具
安装部署
只需从Github中下述地址直接下载、解压最新完整的二进制包即可
1 | # Arthas Release 地址 |
与此同时,官方还提供了一个测试程序math-game.jar。其每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。下载后,直接通过java -jar命令启动即可
1 | # 测试程序math-game.jar 下载 |
当测试程序math-game.jar启动后,我们可通过下述命令启动Arthas
1 | # 启动Arthas |
如下所示,这里math-game.jar进程是第1个,则输入1。然后按Enter回车即可。此时Arthas即会attach到目标进程。此时即可继续执行Arthas的其他相关命令了。
当执行 quit 或 exit 命令时,会退出Arthas终端界面。但attach到目标进程上的Arthas会继续在后台保持运行、端口会保持开放,这样下次再次启动启动Arthas可以直接连上;如果期望完全停止Arthas,可以执行stop命令
Web Console
Arthas还提供了一个Web Console,在其会attach到目标进程,可以直接访问Web页面地址 http://127.0.0.1:8563 进行查看,显然默认端口为8563
由于默认情况下,Arthas只监听127.0.0.1地址。如果想通过Web Console远程连接服务器的Arthas,则可以使用 —target-ip 参数指定需要监听的IP。同时可以使用 —http-port 选项指定Web Console的端口,如果未指定则默认为8563
我们先在服务器启动Arthas,并设置监听服务器IP。需要注意的是对于云服务器而言,还需要对http-port端口进行放行(TCP协议)
1 | # 设置Arthas监听服务器自己的本机IP, 含公网IP |
效果如下所示,左侧终端显示的是服务器上运行的一个Java程序;右侧终端为在服务器上启动的Arthas,并监听了服务器的公网IP
在服务器上的Arthas成功attach后,我们只需通过地址 <服务器公网IP>:
dashboard命令
Arthas提供了丰富命令,这里我们以dashboard为例。其可以展示当前实时的数据面板,该命令支持下述选项
- -i
: 指定数据刷新的间隔,单位为ms。默认值为5000 - -n
: 指定数据刷新的次数。如果不指定,则会一直进行刷新。可通过ctrl + c组合键退出
命令效果如下所示。其中,线程信息中的ID指的是Java级别的线程ID,其不能跟jstack中的 nativeID一一对应;线程信息中的PRIORITY指的是线程优先级,值为1~10 之间的数字,越大表示优先级越高