class在线反编译_Java在线诊断-Arthas生产代码热更新

生产代码热更新

背景:在某次生产环境上出现了Bug,但不能重启服务,只能对生产代码进行热更新。

准备工作

  • 首先保证开发环境代码与生产一致
  • 提前安装阿里巴巴开源的Java诊断工具Arthas,如果生产环境不能访问公网可以采用离线全量安装方式。具体参考:https://alibaba.github.io/arthas/install-detail.html#id2

测试环境验证

  • 首先找到导致Bug的原因,并且可以在测试环境验证通过。

热更新操作(建议先在测试环境操作一次)

  • 启动Arthas工具
java -jar arthas-boot.jar --target-ip 0.0.0.0

8daa78b0ebc57e003258e1bb986c9c2c.png

- 启动成功后将会列出当前运行的所有java进程,输入准备修改的程序编号

2a984d47c6eded824a0a0cb71c3bea7d.png

- 然后会进入到该程序的Arthas操作命令界面中,然后使用sc命令查询将更新的类的classLoaderHash值,并且记录一下这个值,之后会用到

sc com.example.demo.arthas.user.UserController

461e5341e48fb333f0dd83bfc3e53f5f.png

- 从你的开发环境将这个类编译后的class文件上传到某个目录下(可以在当前项目的targetclasses下找到编译后的class文件

ca033b39f50a16b30ffcb1e25d0838df.png

- 使用redefine命令重新加载新的UserController.class文件,同时指定前面记录的classLoaderHash值

redefine -c 5674cd4d /tmp/UserController.class

f4c28bfb3ceb2f93a0b6e2fb26f92adb.png

- 当看到redefine success时代表类已经热更新成功,此时就可以对业务进行验证了!

由于我的操作不便展示,所以采用了Arthas官方的demo,同时官方特别贴心的为我们搭建了线上练习环境,可以访问这个地址: https:// alibaba.github.io/artha s/arthas-tutorials?language=cn
其实还有一种方案,可以先使用jad命令将目标类反编译到某个目录下,接着用vim修改,然后用mc命令在线编译,编译后使用redefine命令热更新,但是我在实际操作中遇到了编译失败的问题,所以就采用了第二种方案,
最后,一定要详细阅读官方的操作手册
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值