1、Arthas常用命令
arthas操作class、classloader的常用命令
(1)classloader - 查看 classloader 的继承树,urls,类加载信息,使用 classloader 去 getResource
(2)dump - dump 已加载类的 byte code 到特定目录
(3)jad - 反编译指定已加载类的源码
(4)mc - 内存编译器,内存编译.java文件为.class文件
(5)redefine - 加载外部的.class文件,redefine 到 JVM 里
(6)retransform - 加载外部的.class文件,retransform 到 JVM 里
(7)sc - 查看 JVM 已加载的类信息
(8)sm - 查看已加载类的方法信息
2、class文件替换
替换calss文件步骤
(1)运行应用服务
(2)启动artahs服务
java -jar arthas-boot.jar
可以查看到第一部启动的1871的java进程,直接输入进程的序号
(3)jad命令反编译class
jad --source-only org.cn.fcw.control.BootController > /home/master/appweb/output/BootController.java
将内存中的BootController的class文件反编译成java源文件输入到指定目录
(4)sc查询指定类的classloader
sc -d org.cn.fcw.control.BaseController | grep classLoaderHash
查询类加载器的hash值
(5)编译新的class文件
修改源码中的问题,将修改后的java源文件编译成class文件
mc -c 类加载器hash java源码全路径 -d 输出路径
(7)重新加载class文件
redefine将新编译的class文件加载到内存中
redefine /home/master/appweb/output/org/cn/fcw/control/BootController.class
至此class文件替换完成