arthas retransform热更新

方式一、二,均使用本地开发环境编译的class文件进行retransform操作,前提是保证线上环境和开发环境的jdk版本一致。(建议jdk小版本也保持一致)。比如同样是jdk1.8对lambda的编译结果就不一样,jdk8u74-b02+以上版本,每个类单独对lambda计数,老版本全局技术。导致retransform始终提示retransform error! java.lang.UnsupportedOperationException: class redefinition failed: attempted to add a method
oracle jdk
zulu jdk

方式一、arthas idea插件方式

1. 在IDEA插件市场下载“arthas idea”插件

2. Ctrl+F9/Ctrl+Shift+F9编译项目

apt-get update
apt-get install -y curl unzip telnet 
cat >> /etc/profile <<\EOF
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JAVA_HOME
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
export CLASSPATH
PATH=$JAVA_HOME/bin:$PATH
export PATH
EOF
source /etc/profile

3. 生成linux命令执行即可

注意

  • 先选中“类名或文件”,再点击生成命令
  • 不要新增field和method
  • 不要额外增加lombok注解,编译后的class文件也可能会新增field和method
    例如:@Slf4j=>private static final Logger log = LoggerFactory.getLogger(CommonController.class);

方式二、原生命令

kubectl -n my-namespace cp CommonController.class my-app:data/tmp
cd /data/tools
java -jar arthas-boot.jar
retransform /data/tmp/CommonController.class

参考
jad/mc/redefine
arthas用的好好的,写个lambda表达式就跪了?该咋解决?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬山境KL攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值