Arthas不停机热修改代码
1、Arthas介绍
Arthas是阿里巴巴开源的Java诊断工具,采用的是命令交互模式,提供Tab 自动补全,在线排查问题,无需重启,动态跟踪Java代码,实时监控JVM状态,方便定位和诊断线上程序运行问题。
开源地址:https://github.com/alibaba/arthas
官方文档:https://arthas.aliyun.com/doc/
2、Arthas通常的使用场景(解决的问题)
1、可以全局视角来查看系统的运行状况
2、排查CPU升高,是哪里占用CPU
3、排查运行的多线程出现死锁,阻塞的情况
4、程序运行耗时很长,排查是哪里出现耗时长
5、这个类是哪个jar包加载的?为什么会报各种类相关的Exception?
6、可以监控JVM的实时运行状态
3、Arthas不停机热修改代码
第一步:下载Alibaba arthas
第二步:解压并以java -jar的方式启动arthas
arthas-packaging-3.5.5-bin是Arthas代码,arthas-packaging-3.5.5-doc是Arthas官方文档。
进入bin目录,进入cmd窗口,通过java -jar 启动arthas。
第三步:选择要修改的项目,直接键入数字回车即可
第四步:使用jad命令反编译要修改的代码,关于jad等Arthas命令可以参考官方文档
jad --source-only com.chuangge.task.cyymsBusinessTask2 > /tmp/cyymsBusinessTask2.java
反编译后可以在文件夹中看到.java文件,由于本人实践发现修改后编译为.class文件报错,于是直接使用idea编译后的.class文件,copy到此文件夹下。
第五步:替换JVM中的代码,使用 redefine
热更新
redefine /tmp/cyymsBusinessTask2.class
正常执行后显示如下:
[arthas@63]$ redefine /tmp/xxxxxx.class
redefine success, size: 1
运行系统进行测试,即可发现代码已被修改!
总结
正常来说只需要简单四步就能进行热更新
一、使用 jad 反编译出 .java 文件
二、编辑文件,修改逻辑
三、使用 mc 编译修改后的文件
四、使用 redefine 热更新
当然,如果像我这样遇到编译.class失败的场景,可以参考我的步骤,直接拿到修改后的 .class 文件,然后继续进行操作。