使用arthas热替换在线运行的java class文件
如果我们在线的系统有问题,但又无法停机进行发版或者仅仅改了一个java文件需要验证一下功能是否正常,这时可以使用arthas的在线热替换功能来做class文件的在线变更。
1.运行java -jar arthas-boot.jar,启动arathas,并选择正在运行的java的进程;
2.执行 jad --source-only com.xxx.xxx.xxx > /tmp/xxx.java 反编译在线执行的要修改的类,将反编译内容复制到/tmp/xxx.java文件中。文件名与类名相同,后缀命名为.java,然后修改其中我们想要修改的内容。(注意:这里只能修改已存在方法的方法体里的内容,无法修改方法的参数,新增加方法等)
3.通过 sc -d com.xxx.xxx.xxx 能获取到class文件的classLoaderHash的哈希码,这里我获取的类的哈希码为:21b8d17c.
4.通过 mc -c 21b8d17c /tmp/ArthasController.java -d /tmp 该命令会将java文件编译成class文件放到tmp目录中。
最后执行 redefine -c 21b8d17c /tmp/com/xxx/xxx/xxxx.class 就可以将编译后的class文件热布署上去;注意这里重启应用后,热布署的方法功能将会还原。