记录使用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 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
zzu123zsw4 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
源码集结号4 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场5 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
啃瓜子的松鼠5 小时前
泛微OAe9-后端二开异步调用
java
秋天的怀念_David6 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
外收内放6 小时前
Python基础语法练习题(73)
java·前端·python
Wang's Blog6 小时前
Java 项目实战: 交友项目 - 环信后台发送消息测试
java·交友
用户3721574261356 小时前
Java 操作 Word 脚注和尾注:添加、读取与删除
java
小嘉丶学长7 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节