欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

arthas命令redefine实现Java热更新

发布时间:2023/11/30 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 arthas命令redefine实现Java热更新 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Arthas非常重要的命令redefine,主要作用是加载外部的.class文件,用来替换JVM已经加载的类,总结起来就是实现了Java的热更新。
redefine在一下几种情况中会失败:1、增加了field;2、增加了method;3、替换正在运行的方法。
前两个比较好理解,第三个意思就是这个方法必须结束之后才会被替换,如果有个方法开始运行之后就不会跳出,那么这个方法所在的类是无法被替换的,类似无限循环的方法。

场景需求
举个例子,在线上代码某个class的方法添加日志输出,修改方法返回结果,但是,又不想直接修改class

只需操作如下:
1.上传修改后的class文件到服务器任意路径,比如:/usr/local/arthas/file/ParserFileService.class
2.下载 Arthas(阿尔萨斯)
3.根据java程序 pid 运行arthas,# ./as.sh 4334
4.通过redefine加载修改后的class文件,$ redefine /data/web/ParserFileService.class
5.验证效果,结束
6.这个方式只是修改运行时内存,class文件并没有改变,服务重启就失效了,如需永久生效需替换原文件

如下效果是添加简单的脚本,自动依据pid运行arthas,省去每次专门查看pid的过程

脚本如下:
脚本放置与需上传class文件同级目录即可。

#!/bin/bash PID=`ps aux|grep [p]roject|awk '{print $2}'`if [ $? -eq 0 ]; thenecho PID is $PID.cd /usr/local/arthas/sh as.sh $PID elseecho PID not exist. fi


注:grep [p]roject等同于 grep -v project;project是项目名
————————————————
版权声明:本文为CSDN博主「IT_狂奔者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chj_1224365967/article/details/107617415

创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的arthas命令redefine实现Java热更新的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。