简介
Arthas是一款功能强大的在线监控和诊断工具,它能够以全局视角实时查看应用的负载、内存使用情况、垃圾回收状态以及线程信息。更为出色的是,它能够在不修改应用程序代码的前提下,对业务问题进行深入诊断。这包括但不限于查看方法调用的输入输出参数、捕获异常、监测方法执行的时间消耗以及类加载信息等。使用Arthas,可以显著提高线上问题的排查效率。
Arthas官网:https://arthas.aliyun.com/doc/
下面介绍几种本人在工作中常用的命令。
使用
安装以及启动
// 下载arthas包
curl -O https://arthas.aliyun.com/arthas-boot.jar
// 启动arthas
java -jar arthas-boot.jar
1. 热部署
(1)安装arthas idea插件
(2)配置插件
如果项目中有用到oss那么就配置,如果没有请看这里: https://arthas.aliyun.com/doc/retransform.html#%E4%B8%8A%E4%BC%A0-class-%E6%96%87%E4%BB%B6%E5%88%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%8A%80%E5%B7%A7
(3)重新编译需要替换的类(很重要!!),然后生成热部署替换命令
命令类似于这样:
curl -Lk "http://new-yoofuu.oss-cn-shanghai.aliyuncs.com/arthas/cd6945ca-ae7c-40fc-bc0b-6a9f1184e?Expires=1706173183&OSSAccessKeyId=LTAI4GKJXbS5R9gbdKNA3QNq&Signature=R7YrVvR3SRfxSq6v4a%2BEz6W0G2s%3D" | base64 --decode >arthas-idea-plugin-hot-swap.sh;chmod a+x arthas-idea-plugin-hot-swap.sh;./arthas-idea-plugin-hot-swap.sh;
(4)在服务器中执行命令
执行成功如下:
注意点
热部署不能改变类的元信息,例如方法、类名等。
2. jad反编译
通常用于验证线上运行的代码是否和本地代码一致。
jad 全类名
3. trace
用于监控方法体内,每一步执行耗时
4. watch
用于监控方法的入参以及出参。
参数名称 | 参数说明 |
---|---|
class-pattern | 类名表达式匹配 |
method-pattern | 函数名表达式匹配 |
express | 观察表达式,默认值:{params, target, returnObj} |
condition-express | 条件表达式 |
[b] | 在函数调用之前观察 |
[e] | 在函数异常之后观察 |
[s] | 在函数返回之后观察 |
[f] | 在函数结束之后(正常返回和异常返回)观察 |
[E] | 开启正则表达式匹配,默认为通配符匹配 |
[x:] | 指定输出结果的属性遍历深度,默认为 1,最大值是 4 |
[m <arg>] |
指定 Class 最大匹配数量,默认值为 50。长格式为[maxMatch <arg>] 。 |
- express
- params:参数
- target:代表当前对象
- returnObj:返回值
- throwExp:抛出的异常
使用示例:
watch classpath methodName "{params,target,returnObj,throwExp}" -x 4 -b -s -n <次数>
5. profiler
用于生成火焰图,查看执行链路耗时
平顶代表耗时比较久。
5. vmtool
用于监控和操作JVM。