!!! 重要警告 !!! # 1. 生产环境谨慎使用先测试 # 2. 修改前备份原始类 # 3. 确保修改符合JVM规范 # 4. 注意内存泄漏风险 # 5. 重启后会丢失修改 # 安全操作流程 # 1. jad导出源码备份 # 2. 在小范围测试修改 # 3. mc编译时检查错误 # 4. redefine后立即验证 # 5. 记录修改内容以便后续正式发布基本流程1. 反编译现有类 - 2. 修改代码 - 3. 编译成.class - 4. 重新加载启动Arthas进入到Arthas的bin目录下执行./as.sh命令,选择对应的Java服务。反编译现有类到指定文件jad --source-only *** /***/arthas-output/***.java修改代码vi /***/arthas-output/***.java编译成.class文件mc -c ClassLoaderHash /***/arthas-output/***.java -d /***查看ClassLoaderHash的值sc -d com.***输出的内容会显示具体的ClassLoaderHash值重新加载class文件retransform /***/***.class
前情提要线上跑的代码找不到源码了,项目又需要调整某个字段的校验规则,早有耳闻知道可以通过Arthas完成这个场景的需求,实际动手试了试,在此记录一下。警告!警告!
!!! 重要警告 !!! # 1. 生产环境谨慎使用先测试 # 2. 修改前备份原始类 # 3. 确保修改符合JVM规范 # 4. 注意内存泄漏风险 # 5. 重启后会丢失修改 # 安全操作流程 # 1. jad导出源码备份 # 2. 在小范围测试修改 # 3. mc编译时检查错误 # 4. redefine后立即验证 # 5. 记录修改内容以便后续正式发布基本流程1. 反编译现有类 - 2. 修改代码 - 3. 编译成.class - 4. 重新加载启动Arthas进入到Arthas的bin目录下执行./as.sh命令,选择对应的Java服务。反编译现有类到指定文件jad --source-only *** /***/arthas-output/***.java修改代码vi /***/arthas-output/***.java编译成.class文件mc -c ClassLoaderHash /***/arthas-output/***.java -d /***查看ClassLoaderHash的值sc -d com.***输出的内容会显示具体的ClassLoaderHash值重新加载class文件retransform /***/***.class