【arthas系】java语言项目如何不停机替换生产某一个class类

先简单介绍下文章中使用是springboot项目,采用的工具是arthas

关于arthas的命令、以及官网地址这里贴以下出来arthas官方文档

这里先说明下,arthas有在线反编译class文件(jad命令)->修改源文件->重新编译(mc命令) 这样的流程来修改文件。这里在网上找到一篇对应这个流程的示例

但是基本上重新编译这个操作很少成功。所以我这边直接选择使用retransform命令完成的

class文件如何替换

步骤一:将我们修改后源文件编译后的最新的class文件上传服务器

这里项目使用的docker部署

这里使用几个命令来完成,将我们编译好的最新class文件上传到指定目录比如/tmp

当然这里的/tmp为docker里面的目录

docker ps -a | grep 项目名称

找到容器前面的id后,我们使用docker  cp命令将服务器本地文件拷贝到容器/tmp目录下

docker cp  xxx.class  容器id:/tmp

 执行命令如果没有错误提示的话,基本上就成功执行了,当然需要验证的话,我们可以直接进入docker容器里面查看对应/tmp目录是否有该文件。

docker exec -it 容器id  bash 

这里就不再演示了

步骤二:进入容器下载arthas,执行命令

进入容器命令

docker exec -it 容器id  bash 

进来后,执行下面命令下载arthas包

curl -O https://arthas.aliyun.com/arthas-boot.jar

java -jar arthas-boot.jar

 按命令1,就可以下载对应jar包

 显示这样子之后,也就代表我们的命令操作完成,也是很正常。执行下面关键命令,如果出来success的字样,代表我们在内存中已经替换完成。

retransform  /tmp/xxxx.class

当然执行完成后,我们在控制台输入exit命令,退出arthas控制台会话。

猜你喜欢

转载自blog.csdn.net/run_boy_2022/article/details/130339494
今日推荐