使用Arthas实现不停机更新

使用Arthas实现不停机更新
生产服务器的缺陷往往需要进行紧急更新,即使是多节点部署也避免不了需要重新启动服务器,使新的逻辑代码更新,所以不停机更新文件显得至关重要,今天介绍一下使用阿里的arthas实现不停机更新文件。

大致思路:我们都知道class文件的加载都是依附于类加载器的,所以我们要做的就是让原本的类加载器重新去加载类文件,这样就可以实现不重启服务器更新应用。而arthas做的就是面向jvm,拿到指定的累加器和待更新的class编译文件,剩下的交给arthas就可以了。
经过测试能实现和JarClassLoader包相同的功能,反编译字节码文件、生成字节码文件、加载进内存中。在此感谢传智播客的老师提供的资料,我整理了一下
classloader相关的(最好在linux系统上操作)

  1. sc 查看已加载的类信息
    sc demo.* sc demo.MathGame
  2. sm 查看已加载类的方法信息
    sm demo.MathGame
  3. jad 反编译指定已加载类的源码
    jad --source-only demo.MathGame
    jad demo.MathGame main
  4. mc(内存编译器),编译.java文件生成.class文件
    1. 先准备一个java文件Test.java
    2. mc /data/arthas/Test.java
    3. mc -d /data/arthas/test /data/arthas/Test.java(反编译成文件制定路径)
  5. 加载外部的.class文件,redefine到JVM里
    1. jad --source-only demo.MathGame > /data/arthas/source/MathGame.java
    2. 修改相应的功能
    3. 把java文件编译成class文件:
    mc /data/arthas/source/MathGame.java -d /data/arthas/
    4. 使用redefine命令加载新的字节码
    redefine /data/arthas/demo/MathGame.class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值