arthas
现实了不停机、不发包替换了生产环境的Java代码
线上代码热更新(动态修改上线项目代码)
手动在代码中抛异常,不停机不重新发包的情况下,修改线上代码
启动服务也达到我们预期异常
替换代码的流程:
1、jad命令
将需要更改的文件先进行反编译,保存下来 ,编译器修改
$ jad --source--only com.example.demo.DemoApplication > /data/DemoApplication.java
- 1
修改完以后需要将类重新加载到JVM
2、SC命令
查找当前类是哪个classLoader加载的
$ sc -d *DemoApplication | grep classLoader
classLoaderHash 20ad9418 #类加载器 编号
3、MC命令
用指定的classloader重新将类在内存中编译
$ mc -c 20ad9418 /data/DemoApplication.java -d /data
Memory compiler output:
/data/com/example/demo/DemoApplication.class
4、redefine命令
将编译后的类加载到JVM
上边编译后的.class文件地址
$ redefine /data/com/example/demo/DemoApplication.class
redefine success, size: 1
- 1
- 2
文件替换后我们再次访问一下程序,发现异常没有了程序已经是我们修改正确后的,class文件替换成功
这样我们就用arthas
现实了不停机、不发包替换了生产环境的Java代码,功能确实比较强大,本文只揭开了arthas
强大功能的冰山一角,后续将出更详细的文章,方便大家一起学习