商城网站的建设定位,宁波网站建设地方,学校网站设计首页,潍坊自动seoArthas非常重要的命令redefine#xff0c;主要作用是加载外部的.class文件#xff0c;用来替换JVM已经加载的类#xff0c;总结起来就是实现了Java的热更新。 redefine在一下几种情况中会失败#xff1a;1、增加了field#xff1b;2、增加了method#xff1b;3、替换正在…Arthas非常重要的命令redefine主要作用是加载外部的.class文件用来替换JVM已经加载的类总结起来就是实现了Java的热更新。 redefine在一下几种情况中会失败1、增加了field2、增加了method3、替换正在运行的方法。 前两个比较好理解第三个意思就是这个方法必须结束之后才会被替换如果有个方法开始运行之后就不会跳出那么这个方法所在的类是无法被替换的类似无限循环的方法。
场景需求 举个例子在线上代码某个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
PIDps 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 projectproject是项目名 ———————————————— 版权声明本文为CSDN博主「IT_狂奔者」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。 原文链接https://blog.csdn.net/chj_1224365967/article/details/107617415