Arthas(阿尔萨斯) -- 阿里在线诊断神器(一)

Arthas 是啥?

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 ,我们可以看到有很多命令,如下图:
Arthas(阿尔萨斯) -- 阿里在线诊断神器(一)_第1张图片

sc 命令

命令介绍:
该命令是 Search-Class 英文的缩写,用于查看JVM已加载的类信息。

常用参数详情
-d
参数用于输出详细的类相关信息(类全限定名,存放路径,接口,注解,继承父类,类加载器等),支持模糊查询

-f
参数需要配合 -d 命令一起使用, 在上述类信息中加入字段信息,包括权限、类型、名字。

例子(使用模糊的方式):

sc -d -f *TestController

Arthas(阿尔萨斯) -- 阿里在线诊断神器(一)_第2张图片
其他参数:
-E
开启正则表达式匹配,默认为通配符匹配

-c
类名表达式匹配

sm 命令

命令介绍:
该命令是 Search-Method 英文的缩写,用于查看已加载类的方法信息.

常用参数
-d
方法详情

例子:(模糊匹配找到 TestController 下的 abc 方法详情)

sc -d *TestController abc

Arthas(阿尔萨斯) -- 阿里在线诊断神器(一)_第3张图片

非常用参数
-E
开启正则表达式匹配,默认为通配符匹配

-c
类名表达式匹配

jad 命令

命令介绍:
该命令可以反编译出已加载类的源代码,如果没有线下环境,我们可以在线上查看到底哪行代码出问题。

例子:

jad *TestController

Arthas(阿尔萨斯) -- 阿里在线诊断神器(一)_第4张图片

tt 命令

tt 命令有点强,使用该命令,会有一个记录表,请求来时,会将请求记录下来,可以进行重放(由 Arthas 启动线程请求)。

常用参数:
-t
开启方法监听,记录下 TestController 中方法 abc 的调用情况

tt -t *TestController abc

Arthas(阿尔萨斯) -- 阿里在线诊断神器(一)_第5张图片
接下来我们按 Q 或者 Ctrl+C 退出监听。

-i
i 是指 index 索引的意思,可以用来找出之前请求的信息。

tt -i 1003

Arthas(阿尔萨斯) -- 阿里在线诊断神器(一)_第6张图片

-l
找出列表所有请求

tt -l

Arthas(阿尔萨斯) -- 阿里在线诊断神器(一)_第7张图片
-p
该之类用于重做一次调用,一般来说,前端调起请求后。结果你没看到,再次在前端调起太麻烦,那么可以使用该参数。

tt -i 1003 -p

上述 1003 是指索引,重新请求类似于 -i 输出消息,这里就不再截图了。

-n
指定抓取次数,达到次数后自动停止。

tt -t *TestController abc -n 3

Arthas(阿尔萨斯) -- 阿里在线诊断神器(一)_第8张图片
-w
用作输出信息,可以找出请求过的信息,参数、以及是否抛出异常。

找出正常返回对象、已经请求参数值

tt -i 1004 -w ‘{params[0], target, returnObj}’

Arthas(阿尔萨斯) -- 阿里在线诊断神器(一)_第9张图片
出现异常的线程,找出相关异常信息 (乱码是我输出的是中文,不需要理会)

tt -i 1009 -w ‘{params[0], target,throwExp}’

Arthas(阿尔萨斯) -- 阿里在线诊断神器(一)_第10张图片
如果我们发现异常,想看看什么异常,怎么办呢?

tt -i 1009 -w throwExp

Arthas(阿尔萨斯) -- 阿里在线诊断神器(一)_第11张图片

小结:

Arthas 阶段入门一就先写到这里了,后续会继续补充其他内容学习,有兴趣的可以参考官方网站进行学习。https://alibaba.github.io/arthas/tt.html

有兴趣的同学可以关注公众号一起学习!
Arthas(阿尔萨斯) -- 阿里在线诊断神器(一)_第12张图片

你可能感兴趣的:(Arthas诊断工具学习)