纪录使用Arthas修改线上源码重新加载的一次过程 [复制链接]
发表于 2026-2-9 14:45:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
前情提要
  1. 线上跑的代码找不到源码了,项目又需要调整某个字段的校验规则,早有耳闻知道可以通过Arthas完成这个场景的需求,实际动手试了试,在此记录一下。
复制代码
告诫!告诫!
  1. # !!! 重要警告 !!!
  2. # 1. 生产环境谨慎使用,先测试
  3. # 2. 修改前备份原始类
  4. # 3. 确保修改符合JVM规范
  5. # 4. 注意内存泄漏风险
  6. # 5. 重启后会丢失修改
  7. # 安全操作流程:
  8. # 1. jad导出源码备份
  9. # 2. 在小范围测试修改
  10. # 3. mc编译时检查错误
  11. # 4. redefine后立即验证
  12. # 5. 记录修改内容以便后续正式发布
复制代码
根本流程
  1. 1. 反编译现有类 -> 2. 修改代码 -> 3. 编译成.class -> 4. 重新加载
复制代码
启动Arthas
  1. 进入到Arthas的bin目录下执行 `./as.sh` 命令,选择对应的Java服务。
复制代码
反编译现有类到指定文件
  1. jad --source-only *** > /***/arthas-output/***.java
复制代码
修改代码
  1. vi /***/arthas-output/***.java
复制代码
编译成.class文件
  1. mc -c <ClassLoaderHash> /***/arthas-output/***.java -d /***
复制代码
查察ClassLoaderHash的值
  1. sc -d com.***
复制代码
输出的内容会体现详细的ClassLoaderHash值
重新加载class文件
  1. retransform /***/***.class
复制代码
免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金.
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表