arthas现实了不停机、不发包替换了生产环境的Java代码

灰太狼 2022-11-20 08:10 66阅读 0赞

arthas现实了不停机、不发包替换了生产环境的Java代码

线上代码热更新(动态修改上线项目代码)

手动在代码中抛异常,不停机不重新发包的情况下,修改线上代码
在这里插入图片描述
启动服务也达到我们预期异常
在这里插入图片描述

替换代码的流程:

1、jad命令 将需要更改的文件先进行反编译,保存下来 ,编译器修改

  1. $ jad --source--only com.example.demo.DemoApplication > /data/DemoApplication.java
  • 1

在这里插入图片描述

修改完以后需要将类重新加载到JVM

2、SC命令 查找当前类是哪个classLoader加载的

  1. $ sc -d *DemoApplication | grep classLoader
  2. classLoaderHash 20ad9418 #类加载器 编号

3、MC命令 用指定的classloader重新将类在内存中编译

  1. $ mc -c 20ad9418 /data/DemoApplication.java -d /data
  2. Memory compiler output:
  3. /data/com/example/demo/DemoApplication.class

4、redefine命令 将编译后的类加载到JVM

上边编译后的.class文件地址

  1. $ redefine /data/com/example/demo/DemoApplication.class
  2. redefine success, size: 1
  • 1
  • 2

文件替换后我们再次访问一下程序,发现异常没有了程序已经是我们修改正确后的,class文件替换成功

这样我们就用arthas现实了不停机、不发包替换了生产环境的Java代码,功能确实比较强大,本文只揭开了arthas强大功能的冰山一角,后续将出更详细的文章,方便大家一起学习
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,66人围观)

还没有评论,来说两句吧...

相关阅读

    相关

    初次见面,谈话间,便隐隐有些嫌弃的意味。我以为不过是多心,得了受迫害妄想症。 直到后来第一次责问我进度,才知道直觉准的一塌糊涂。 不过是简单的导一个gradle 项目,

    相关 懂优雅停机,搞挂线上服务

    公司项目是用 consul 进行注册的,在发布微服务的时候,总是会导致调用方出现一定几率的调用失败。一开始百思不得其解,后来咨询了资深的同事才知道:原来是服务下线的时候没有优雅

    相关 唉,出版

    这段时间,联系了几家大的计算机图书出版社,想看看我写的关于Lotus Notes和Xpages开发的系列文章整理之后,还有很多没写的内容,有没有可能出版。编辑们的反应都是Lot