arthas基础使用

官网

arthas.aliyun.com/

常用命令

retransform 替换class文件

retransform /opt/temp.class

jad 反编译

jad org.my.task.AutomatiTask

exit/logout/q/quit 退出

退出当前 Arthas 客户端,其他 Arthas 客户端不受影响。等同于exit、logout、q三个指令。
只是退出当前 Arthas 客户端,Arthas 的服务器端并没有关闭,所做的修改也不会被重置。

stop

关闭 Arthas 服务端,所有 Arthas 客户端全部退出。
关闭 Arthas 服务器之前,会重置掉所有做过的增强类。但是用 redefine/retransform 重加载的类内容不会被重置。

常用场景

找到卡死的线程

比如打印了日志之后卡死

2023-07-24 17:44:14 [com.xxl.job.core.thread.JobThread#run]-[164]-[Thread-33] 

连接上arthas后输入thread --all 靠肉眼找到Thread-33名字的线程找到他的id输入
thread id 即可看到当前线程的堆栈信息.

热更新

比如给方法加日志查问题.或者简单的修改懒得发包
在idea里面修改原java文件 点击构建->重新编译xx.java
然后找到更新后的class文件,扔到服务器上.
进入arthas 输入命令 retransform /opt/temp.class
新加字段class替换不了,如果之前没有log对象请用System.out.println()

常见问题

Can not find tools.jar

错误原因: arthas依赖jdk中的 tools.jar工具包,你可能安装的JRE或者JDK 9 及以上版本,默认没有此包
解决方法: 从别的JDK的lib下面拉一个过来扔到当前java环境的lib里面 记得linux要从linux版本的jdk拉

选择pid界面 只显示id 和/usr/bin/java不显示jar包名

错误原因:已知某些操作系统会导致此问题 如阿里龙蜥(Anolis)
解决方法:
使用 ps -ef | grep jar包名
第一条记录的pid就是你jar包的pid,根据此输入数字