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,根据此输入数字