信步漫谈之JAVA调试工具—Arthas

一、安装说明

Arthas(阿尔萨斯)是一款开源的Java诊断工具,在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。

Arthas 支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能。

需要注意的是,Arthas目前只支持本地调试(即你本机的Arthas无法调试另一台机器上的Java进程)。

官网源码路径:https://github.com/alibaba/arthas

版本库路径:https://github.com/alibaba/arthas/releases

可运行jar程序下载路径:https://arthas.gitee.io/arthas-boot.jar

arthas安装的方式有如下几种:

1、使用独立运行程序jar包,通过java -jar的命令运行(curl -O https://arthas.gitee.io/arthas-boot.jar

2、用官方提供安装程序,运行as.sh脚本安装

3、用rpm的方式安装

此处介绍第一种最为便捷的方式。

二、实例讲解

此处以官网提供的demo程序作为演示(arthas-demo.jar,程序随机生成整数,再执行因式分解,把结果打印出来。如果生成的随机数是负数,则会打印提示信息)

1)打开一个cmd界面,运行 demo 程序(命令:java -jar arthas-demo.jar)

2)再打开一个cmd界面,运行 arthas(命令:java -jar arthas-boot.jar),此时会提示选择要监听的 java 进程ID,选择ID 号,回车即可。

3)输入帮助命令可查询所有命令的说明(命令:help)

用 exit 或者 quit 命令可以退出Arthas。exit/quit命令只是退出当前session,arthas server还在目标进程中运行。想完全退出Arthas,可以执行 stop 命令。

Arthas 所有命令都可以在末尾加上-h的参数,输出命令使用说明,支持管道(|,注意前后留空格),支持命令自动补全(使用Tab补全)。在动态查询命令持续输出情况下,可输入Q或Ctrl+C结束输出,退回命令界面。

Arthas 支持常见的命令行快捷键,比如Ctrl + A跳转行首,Ctrl + E跳转行尾。所支持的快捷键可以用 keymap 命令查看。

4)查看当前系统的实时数据(命令:dashboard),从上到下分别是线程信息、内存信息、运行时参数。

5)查看线程的运行栈(命令:thread 线程ID)

6)查看加载的类信息(命令:sc -d 类名/接口名,支持通配,-d是输出详细信息),如果输入的是接口名,则会输出所有该接口的实现类

7)查找类的具体函数(命令:sm -d 类名,-d是打印详细信息)

8)查看函数的参数/返回值/异常信息(命令:watch 类名包含路径 函数名 returnObj)

9)反编译查看代码(命令:jad 类名包含路径)

10)打印所有的System Properties信息(命令:sysprop)

可通过sysprop testKey key值的方式动态修改。

11)打印 jvm 的信息(命令:jvm)

三、OGNL命令

在Arthas里,有一个单独的ognl命令,可以动态执行代码。

例如输入以下命令,会在demo程序的打印界面输出“hello ognl”

ognl '@java.lang.System@out.println("hello ognl")'

四、WATCH命令

watch命令可用于监控类函数的各项数据,包括输入输出、异常抛出、花费时间等

命令格式:watch 类名 函数名 打印数据ognl表达式 输出打印结果的条件ognl表达式

例如:watch demo.MathGame primeFactors '{params,returnObj}' -x 2 '#cost>100'

说明:-x代表展开结果,默认1,此处2代表将结果展开到第二层,'#cost>100'意思是,在花费时间超过100ms情况下才打印输出

image

五、FAQ

1)错误现象:java -jar arthas-boot.jar报错
[ERROR] Can not read maven-metadata.xml from https://maven.aliyun.com/repository/public/com/taobao/arthas/arthas-packaging/maven-metadata.xml

解决办法:
由于组网限制,不能访问外网,需要全量安装
https://arthas.aliyun.com/doc/install-detail.html#
或者直接在官网下载全量包(bin)
https://github.com/alibaba/arthas/releases

论坛问题讨论:https://github.com/alibaba/arthas/issues/341

2)错误现象:无法建立socket连接
com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded

解决办法:
将arthas的文件夹权限设为777 : chmod 777 arthas
切换到普通用户,设置java 环境变量 .
java -jar arthas-boot.jar

posted @ 2020-09-26 20:22  临渊启明  阅读(1013)  评论(0编辑  收藏  举报