使用arthas热加载

时间:2024-03-30 12:08:53

   工作中经常有这种问题:线上有问题,需要排查,但是相关关键日志没有打印,不好定位问题,这个时候那就修改代码,再发布一次,然后排查问题,这样是可行的,但是不利于快速排查问题

   之前一直使用阿里的arthas,偶然发现它具备热加载的功能,很好用,这里记录下(当然,也是从别人那里学习的)

   我们要达到的效果是不需要发布,直接修改相关文件,然后热加载,做到线上动态更新相关文件功能

   比如,访问一个链接,得到

使用arthas热加载

然后经过如下几步

1.启动arthas(当然,你的机器要装arthas)

使用arthas热加载

2.将要修改的文件拉下来

jad --source-only 文件路径 > 要存放路径(注意,文件名称要保持一致)

使用arthas热加载

3.找到文件的类加载器

sc -d 文件路径 | grep classLoaderHash

使用arthas热加载

4.修改第二步拉下来的文件(ok修改为alibaba arthas)

使用arthas热加载

5.编译第四步修改的文件(会生成一个编译后文件的路径)

mc -c 5674cd4d /home/reader/HealthController.java

使用arthas热加载

6.加载编译好后的文件

redefine 编译后文件路径(路径在第五步已经生成)

使用arthas热加载

7.再次访问刚才页面,可以了

使用arthas热加载

补充两点

1.目前看来只能针对方法内部做修改,如果针对类本身做一些修改,比如加注解,加字段,就会报错

使用arthas热加载

2.可以直接ideal编译好文件,上传到服务器,然后直接redefine,更快捷