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