记录使用Arthas修改线上源码重新加载的一次过程

前情提要

复制代码
线上跑的代码找不到源码了,项目又需要调整某个字段的校验规则,早有耳闻知道可以通过Arthas完成这个场景的需求,实际动手试了试,在此记录一下。

警告!警告!

shell 复制代码
# !!! 重要警告 !!!
# 1. 生产环境谨慎使用,先测试
# 2. 修改前备份原始类
# 3. 确保修改符合JVM规范
# 4. 注意内存泄漏风险
# 5. 重启后会丢失修改

# 安全操作流程:
# 1. jad导出源码备份
# 2. 在小范围测试修改
# 3. mc编译时检查错误
# 4. redefine后立即验证
# 5. 记录修改内容以便后续正式发布

基本流程

shell 复制代码
1. 反编译现有类 -> 2. 修改代码 -> 3. 编译成.class -> 4. 重新加载

启动Arthas

复制代码
进入到Arthas的bin目录下执行 `./as.sh` 命令,选择对应的Java服务。

反编译现有类到指定文件

shell 复制代码
jad --source-only *** > /***/arthas-output/***.java

修改代码

shell 复制代码
vi /***/arthas-output/***.java

编译成.class文件

shell 复制代码
mc -c <ClassLoaderHash> /***/arthas-output/***.java -d /***

查看ClassLoaderHash的值

shell 复制代码
sc -d com.***

输出的内容会显示具体的ClassLoaderHash值

重新加载class文件

shell 复制代码
retransform /***/***.class
相关推荐
桦说编程2 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅4 小时前
Java面向对象入门(类与对象,新手秒懂)
java
初次攀爬者5 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺5 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart7 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
NE_STOP7 小时前
MyBatis-mybatis入门与增删改查
java
孟陬11 小时前
国外技术周刊 #1:Paul Graham 重新分享最受欢迎的文章《创作者的品味》、本周被划线最多 YouTube《如何在 19 分钟内学会 AI》、为何我不
java·前端·后端
想用offer打牌11 小时前
一站式了解四种限流算法
java·后端·go
华仔啊11 小时前
Java 开发千万别给布尔变量加 is 前缀!很容易背锅
java