登录
注册
写文章
发现
工具
使用Arthas实现热更新代码
_3t3lfz KEKfID
编辑文章
使用Arthas实现热更新代码
asfx站长
2023.09.27 11:15:57
阅读
529
1.在线下载Arthas ``` curl -O https://arthas.aliyun.com/arthas-boot.jar ``` 2.启动Arthas ``` java -jar arthas-boot.jar ``` 3.按照提示输入对应的应用编号,例如1,敲回车 4.使用sc命令可以查到加载到jvm的类,例如: ``` sc xyz.asfx.HelloController ``` 5.这里假设需要对HelloController进行代码热更新,反编译类到/tmp文件夹下 ``` jad --source-only xyz.asfx.HelloController > /tmp/HelloController.java ``` 6.查看类的类加载器hash值,并记录下来后面用于编译 ``` sc -d *HelloController | grep classLoaderHash ``` 例如得到的类加载器hash值是:2e0fa5d3 7.新开一个窗口编辑/tmp文件夹下的java类,(arthas不提供vi命令),编辑新的业务代码后保存退出 8.回到原arthas命令窗口,使用mc命令编译修改后的java类,并放在/tmp文件夹下 ``` mc -c 2e0fa5d3 /tmp/HelloController.java -d /tmp ``` 得到结果: /tmp/xyz/asfx/HelloController.class 9.重新加载编译好的class类 ``` redefine /tmp/xyz/asfx/HelloController.class ``` 此时就能看到代码改过之后的效果了。但<span style="color:red">注意</span>,如果再次使用jad命令去反编译HelloController类,就会回到修改前的代码了,也即回到了原代码的效果了。 [更多Arthas命令请参考这里](https://arthas.aliyun.com/doc/commands.html "更多Arthas命令请参考这里")
我的主页
退出