前提条件:
Java系统镜像中集成了arthas。
第一步,修改代码后编译出class。
尽管arthas中提供了反编译工具jad和内存编译工具mc,可以在命令行完成修改和编译工作,但是对于引用了第三方类库比如Spring的代码,编译会出错。所以最快的办法还是在本地IDE中修改后编译。
第二步,把class拷贝到容器中,有2种方案。
- 用kubectl cp:
执行
kubectl cp /workspace/your-project/target/classes/your-path/Test.class -n your-namespace your-pod:/tmp/Test.class -c your-container
- 复制粘贴:
在本地先转换class文件为base64,再保存为result.txt:
base64 < Test.class > class.txt
到服务器上,复制本地的内容,粘贴再保存,然后还原为class文件:
base64 -d < class.txt > Test.class
第三步,加载修改的类。
在arthas中执行:
redefine /tmp/Test.class
网友评论