Arthas反编译更新线上代码
@ 归零 | 星期一,四月 12 日,2021 年 | 1 分钟阅读 | 更新于 星期一,四月 12 日,2021 年

很多时候,出现线上问题,我们需要紧急修复程序并立马生效,使线上问题影响最小,所以我们需要线上更新部分程序,今天就以热更新com.example.demo.arthas.user.UserController为例,介绍Arthas工具如何热更新线上代码。

1. 下载arthas工具并运行

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

2. 反编译UserController类

jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java

4. 修改UserController.java

vim /tmp/UserController.java

5. sc查找加载UserController的ClassLoaderHash

sc -d *UserController | grep classLoaderHash

6. mc内存编译

mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmp

也可以通过mc -c /tmp/UserController.java -d /tmp,使用-c参数指定ClassLoaderHash

mc -c 1be6f5c3 /tmp/UserController.java -d /tmp

mc 参数:
-d 指定输出目录
-c 指定classloader hash –classLoaderClass 指定classloader类

7. 热更新上一步编译好的class

redefine /tmp/com/example/demo/arthas/user/UserController.class

© 2014 - 2022 Lionel's Blog

Powered by Hugo with theme Dream.