前言:
前面两篇文章介绍了 Arthas 诊断神器的一些操作命令,今天我们继续学习 Arthas 其他命令。
开始学习
monitor 命令
该命令可以查看我们方法的调用,监控处方法成功,失败次数,以及 RT(响应时间)
常用参数
-c
指定监控输出结果
monitor *TestController abc -c 2
监控项 | 说明 |
---|---|
timestamp | 时间戳 |
class | Java类 |
method | 方法(构造方法、普通方法) |
total | 调用次数 |
success | 成功次数 |
fail | 失败次数 |
rt | 平均RT |
fail-rate | 失败率 |
mc 命令
内存编译器,编译.java文件生成.class。
正常操作
mc /tmp/Test.java
输出到指定目录
mc G:\ideaproject/springboot-arthas/src/main/java/com/example/springbootarthas/SpringbootArthasApplication.java -d /test
redefine 命令
加载外部的.class文件。比如有个需求,我们不能挺服务器修改类中某个方法返回值,那么我们可以使用用该命令去操作。
注意:
此命令可能会出现失败,如果是新增字段或方法,可能会导致加载失败
线上环境:将 class 类反编译到/tmp/文件夹下
jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
编辑 UserController 文件,修改其内容。
vim /tmp/UserController.java
接下来我们需要知道到底是谁加载了 UserController
sc -d *UserController | grep classLoaderHash
接下来就在内存中进行编译了,将文件编译成 class 文件到 /tmp 目录下
mc -c 5674cd4d /tmp/UserController.java -d /tmp
最后就是我们热更新代码了。。
redefine /tmp/com/example/demo/arthas/user/UserController.class
注意:
- redefine 不允许新增加 field/method
- redefine 对于正在跑的函数,没有退出是不能生效的
heapdump
常用参数:
-l
将堆信息输入到指定文件内
heapdump -l g:/test/heap.hprof
ongl
调用静态方法输出结果
ognl ‘@java.lang.System@out.println(“hello”)’
后续待补充。。。