工作中经常有这种问题:线上有问题,需要排查,但是相关关键日志没有打印,不好定位问题,这个时候那就修改代码,再发布一次,然后排查问题,这样是可行的,但是不利于快速排查问题
之前一直使用阿里的arthas,偶然发现它具备热加载的功能,很好用,这里记录下(当然,也是从别人那里学习的)
我们要达到的效果是不需要发布,直接修改相关文件,然后热加载,做到线上动态更新相关文件功能
比如,访问一个链接,得到
然后经过如下几步
1.启动arthas(当然,你的机器要装arthas)
2.将要修改的文件拉下来
jad --source-only 文件路径 > 要存放路径(注意,文件名称要保持一致)
3.找到文件的类加载器
sc -d 文件路径 | grep classLoaderHash
4.修改第二步拉下来的文件(ok修改为alibaba arthas)
5.编译第四步修改的文件(会生成一个编译后文件的路径)
mc -c 5674cd4d /home/reader/HealthController.java
6.加载编译好后的文件
redefine 编译后文件路径(路径在第五步已经生成)
7.再次访问刚才页面,可以了
补充两点
1.目前看来只能针对方法内部做修改,如果针对类本身做一些修改,比如加注解,加字段,就会报错
2.可以直接ideal编译好文件,上传到服务器,然后直接redefine,更快捷