生产环境中如果大家遇到紧急的bug需要修复,但是又害怕重启应用导致告警或影响的,还有容器部署的需要重新打镜像包的小伙伴,这里给大家提供个不需要重启应用的方法,也能够对应用进行紧急变更,实现代码热部署。
但是目前仅限于class类中没有新增方法的热部署,可以进行一些逻辑bug的修复操作。
1、首先,我们先启动arthas应用,选择你需要更新的应用ID。安装包可以到阿里仓库下载。
# 执行运行启动arthas
java -jar arthas-boot.jar
2、接着按照下面步骤完成操作:
第一步:jad --source-only com.xxx.xxx.Test> /usr/local/arthas/Test.java
第二步:修改/usr/local/arthas/Test.java
第三步:mc /usr/local/arthas/Test.java -d /usr/local/arthas/
或者
sc -d com.xxx.xxx.Test | grep classLoaderHash
mc -c 18b4aac2 /usr/local/arthas/Test.java -d /usr/local/arthas/
第四步:retransform /usr/local/arthas/com/xxx/xxx/Test.class
(这里也可以在本地编译好class文件直接替换)
第五步:jad --source-only com.allinpay.xxx.xxx.Test
最后提醒下,要注意包的结构需要保持一致,热部署后cpu会出现短暂的冲高,对cpu变化影响比较大的应用不建议使用。