记录使用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
相关推荐
SamDeepThinking15 分钟前
从REST到gRPC,一个API选型的思考框架
java·后端·程序员
Zane199418 分钟前
接口都能写默认实现了,为什么还需要抽象类
java·后端
未秃头的程序猿20 分钟前
读Spring AI源码的方法——不是硬啃,是带着问题去翻
java·后端·spring
用户31268748772033 分钟前
别再 Thread.sleep 硬等了!并发工具类到底怎么选?
java
Java内核笔记35 分钟前
万字长文剖析 Spring Boot 4 自动配置机制源码:从 @EnableAutoConfiguration 到条件装配
java·后端
evans在进步39 分钟前
Spring MVC 核心机制详解:全局异常处理、请求跳转与数据绑定
java·spring·mvc
weixin_BYSJ19871 小时前
springboot小区物业管理小程序---附源码45555
java·javascript·spring boot·python·django·flask·php
coder_lorraine1 小时前
Halo 2.x 回收站文章无法删除?一篇文章教你彻底解决
java·运维
索隆zoro1 小时前
Army 进阶:DML 操作体系与 Spring AI 集成
java
吃饱了得干活1 小时前
为什么你的Service越写越臃肿?三层架构的“业务逻辑层”是个黑盒
java·后端·架构