Arthas

月伴飞鱼 2025-03-07 10:09:50
工具相关
支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!

img

官方文档: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 nameInteger 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
img
支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!