arthas retransform热更新

arthas retransform热更新

    • 方式一、arthas idea插件方式
      • 1. 在IDEA插件市场下载“arthas idea”插件
      • 2. Ctrl+F9/Ctrl+Shift+F9编译项目
      • 3. 生成linux命令执行即可
    • 方式二、原生命令

方式一、二,均使用本地开发环境编译的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表达式就跪了?该咋解决?

你可能感兴趣的:(java,linux,开发语言)