查看: 76|回复: 0

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

[复制链接]

1

主题

0

回帖

0

积分

热心网友

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2009-4-18
发表于 2026-2-9 14:05:00 | 显示全部楼层 |阅读模式

前情提要

线上跑的代码找不到源码了,项目又需要调整某个字段的校验规则,早有耳闻知道可以通过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


来源:https://www.cnblogs.com/caInlao/p/19595068
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部