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