在开发项目的时候,你经常会遇到下面的场景:
这时候,我们可以使用 Arthas 来解决上面的问题。
Arthas 的官方文档: Arthas使用说明
因为 Arthas 是一个由 Spring boot 编写的项目,所以进行安装使用时,我们只需要把对应的 jar 包进行下载,然后使用 java -jar 就可以把项目跑起来
curl -O https://arthas.aliyun.com/arthas-boot.jar
执行上面的 jar 包时,我们必须先运行一个 java 进程在内存中,不然会出现找不到 java 进程的错误 【!!#ff0000 可以使用 jps 查看系统运行的进程!!】
java -jar arthas-boot.jar
通过 thread 命令查看当前 JVM 的线程堆栈信息
需要使用加参数的命令,在后面拼接即可
参数名称 | 参数说明 |
---|---|
数字 | 线程id |
[n:] | 之地昂最忙的前N个线程并打印堆栈 |
[b] | 找到当前阻塞其他线程的线程 |
[i] | 指定cpu 占比统计的采样间隔,单位为毫秒 |
thred -n 3
thread -b
我们想知道线上的分支是否有自己的代码时,我们可以通过 jad 命令进行反编译
jad 类全路径名
作用: 监控指定类中方法执行情况
对匹配 class-pattern / method-pattern 的类, 反复噶调用进行监控
monitor 命令是一个非实时返回命令,是不断等待目标 java 进程返回信息,直到用户输入 Ctrl + C 为止
monitor 类全路径名 方法名 -n 监控次数 --cycle 间隔采样的时间[单位s]
观察指定方法的调用情况
方法执行数据规则,让你能方便观察到指定方法的调用情况
能观察到的范围为:返回值,抛出异常,入参,通过编写 ONGL 表达式进行变量的查看
watch 类名 方法名 '{params,returnObj,throwExp}' -n 5 -x 3
这里的 ‘{params,returnObj,throwExp}’ 就是所谓的ognl 表达式的一种,它表示需要输出参数,返回值,抛出异常
trace 是对方法内部的调用路径进行追踪,并输出方法路径上每个节点的耗时
参数说明
参数名称 | 参数说明 |
---|---|
class-pattern | 类名表达式 |
method-pattern | 方法名表达式 |
condition-express | 条件表达式,默认是通配符匹配 |
[E] | 开启正则表达式匹配,默认是通配符匹配 |
[n:] | 设置命令执行次数 |
#cost | 方法执行耗时,单位是毫秒 |
trace 类名 方法名 调用次数 限制条件
上面大概介绍了 Arthas 的一些通用命令。平时开发的时候,我们完全可以借助一些编译器的插件,而无需手敲命令。
简单使用
启用插件后,我们就可以负者一些通用命令进行修改