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 ];
then
   echo PID is $PID.
   cd /usr/local/arthas/
   sh as.sh $PID
else
   echo 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值