
官方文档:https://arthas.aliyun.com/
Arthas可以帮助开发人员在运行时对Java应用进行调试和诊断,解决线上问题。
连接应用
默认连接:
指 Arthas 自动连接当前机器上正在运行的 Java 应用程序。
$ java -jar arthas-boot.jar
尝试连接指定的 IP 地址和端口号上的 Java 应用程序。
$ java -jar arthas-boot.jar --target-ip 127.0.0.1 --telnet-port 3658
Telnet 连接:
通过 Telnet 协议连接到 Java 应用程序。
$ telnet 127.0.0.1 3658
进入Arthas Shell:
./as.sh
查看JVM状态:
在Arthas Shell中,可以通过以下命令查看当前JVM的状态。
$ jvm
方法调用链路追踪
查看某个方法被调用了多少次、被哪些方法调用了,甚至是每一次调用的参数和返回值。
追踪某个方法的所有调用:
$ trace com.example.demo.service.UserService getUserById
追踪某个类中所有方法的调用:
$ trace com.example.demo.service.UserService
追踪某个方法的详细信息:
追踪
com.example.demo.service.UserService
类中的getUserById
方法的前5次调用,并打印出每次调用的参数和返回值。
$ trace com.example.demo.service.UserService getUserById -n 5
监控系统资源消耗
监控CPU占用率:
输出一个监控面板,其中包含了CPU占用率、Java线程数、内存使用情况等信息。
$ dashboard
监控线程:
输出当前JVM中所有线程的信息。
$ thread
监控GC:
输出GC的相关信息。
动态修改代码
修改某个类的某个方法的返回值:
修改
com.example.demo.service.UserService
类中的getUserById
方法的返回值为"Hello Arthas!"
。
$ redefine com.example.demo.service.UserService getUserById "return \"Hello Arthas!\";"
添加某个类的某个方法:
在
com.example.demo.service.UserService
类中添加一个名为addUser
的方法。并且该方法的参数为
String name
和Integer age
,最后将会输出日志并返回true
。
$ redefine -c com.example.demo.service.UserService -m addUser --params-string "java.lang.String name, java.lang.Integer age" "logger.info(\"addUser invoked! name:{} age:{}\", name, age); return true;"
常用命令
查看方法调用次数:
查看
com.example.demo.service.UserService
类中的getUserById
方法在最近的3秒钟内被调用的次数。
$ sc -d 3 com.example.demo.service.UserService getUserById
查看线程堆栈:
$ thread -i [线程ID]
输出指定ID的线程的堆栈信息。
查看类的加载情况:
查看
com.example.demo.service.UserService
类的加载情况。
$ classloader -c com.example.demo.service.UserService
