Arthas——热替换

Arthas 热替换

 就在昨天,一个运行多年的系统出问题了,一个关键的点没有日志打印,怎么办,替包? 不合适。 
 于是想到了Arthas的redefine支持加载.class文件。

热替换步骤

  1. 使用jad反编译并输出源码,命令如下:
    jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
  1. 使用vi 命令修改UserController.java文件

  2. 使用sc拿到classLoader的Hash值

    sc -d  com.example.demo.arthas.user.UserController | grep classLoaderHash
    classLoaderHash   2c20c3ff
  1. 使用mc命令编译修改过的UserController.java
    mc -c 2c20c3ff  /tmp/UserController.java -d /tmp
  1. 使用redefine加载字节码到内存
    redefine /tmp/com/example/demo/arthas/user/UserController.class

可能遇到的问题

  • 保证你的arthas运行环境是jdk而不是jre(最好环境变量中配置也是jdk)
  • mc命令如果执行不成功,那么直接在本地修改代码,编译后将.java文件上传至服务器
  • 执行redefine后,不要再使用jad去验证是否已经成功加载你的修改,使用jad会覆盖你的修改,使你的修改无效。(redefine命令和jad/watch/trace/monitor/tt等命令会冲突。执行完redefine之后,如果再执行上面提到的命令,则会把redefine的字节码重置)
  • 如果你看到了这篇博文,官方已经推出了一个新的命令 retransform来代替redefine,到官网下载一个最新的全量包使用就好。
  • retransform命令
  retransform  /tmp/com/example/demo/arthas/user/UserController.class

官网redefine说明

另外需要注意:
在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值