Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。
Arthas 支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。(以上介绍来自官网)
首先,我们随便来一个测试项目,代码如下:
@RestController
public class TestController {
@GetMapping(value = "test")
public Users abc(Integer integer) {
if (integer == 0) {
throw new IllegalArgumentException("参数 0 异常");
}
Users users = new Users();
users.setName("Gentle");
users.setAge(integer);
return users;
}
}
@Data
class Users {
private String name;
private Integer age;
}
如何进行 arthas 操作界面就不介绍了,下面我们开始相关命令学习。
初次学习,输入一下 help ,我们可以看到有很多命令,如下图:
命令介绍:
该命令是 Search-Class 英文的缩写,用于查看JVM已加载的类信息。
常用参数详情
-d
参数用于输出详细的类相关信息(类全限定名,存放路径,接口,注解,继承父类,类加载器等),支持模糊查询
-f
参数需要配合 -d 命令一起使用, 在上述类信息中加入字段信息,包括权限、类型、名字。
例子(使用模糊的方式):
sc -d -f *TestController
-c
类名表达式匹配
命令介绍:
该命令是 Search-Method 英文的缩写,用于查看已加载类的方法信息.
常用参数
-d
方法详情
例子:(模糊匹配找到 TestController 下的 abc 方法详情)
sc -d *TestController abc
非常用参数
-E
开启正则表达式匹配,默认为通配符匹配
-c
类名表达式匹配
命令介绍:
该命令可以反编译出已加载类的源代码,如果没有线下环境,我们可以在线上查看到底哪行代码出问题。
例子:
jad *TestController
tt 命令有点强,使用该命令,会有一个记录表,请求来时,会将请求记录下来,可以进行重放(由 Arthas 启动线程请求)。
常用参数:
-t
开启方法监听,记录下 TestController 中方法 abc 的调用情况
tt -t *TestController abc
-i
i 是指 index 索引的意思,可以用来找出之前请求的信息。
tt -i 1003
-l
找出列表所有请求
tt -l
-p
该之类用于重做一次调用,一般来说,前端调起请求后。结果你没看到,再次在前端调起太麻烦,那么可以使用该参数。
tt -i 1003 -p
上述 1003 是指索引,重新请求类似于 -i 输出消息,这里就不再截图了。
-n
指定抓取次数,达到次数后自动停止。
tt -t *TestController abc -n 3
-w
用作输出信息,可以找出请求过的信息,参数、以及是否抛出异常。
找出正常返回对象、已经请求参数值
tt -i 1004 -w ‘{params[0], target, returnObj}’
出现异常的线程,找出相关异常信息 (乱码是我输出的是中文,不需要理会)
tt -i 1009 -w ‘{params[0], target,throwExp}’
tt -i 1009 -w throwExp
Arthas 阶段入门一就先写到这里了,后续会继续补充其他内容学习,有兴趣的可以参考官方网站进行学习。https://alibaba.github.io/arthas/tt.html