JVM内存模型和性能调优:阿里巴巴Arthas调优工具:Arthas实战之线上代码热更新- 第47篇

背景

       尽管在生产环境热更新代码,并不是很好的行为,很可能导致:热更不规范,同事两行泪。

       但很多时候我们的确希望能热更新代码,比如:

       线上排查问题,找到修复思路了,但应用重启之后,环境现场就变了,难以复现。怎么验证修复方案?

 

步骤

步骤1: jad命令反编译代码

步骤2: 文本编辑器修改代码

步骤3: sc命令查找代码所在类的ClassLoader

步骤4: mc命令指定ClassLoader编译代码

步骤5: redefine命令热更新代码

 

实战

步骤1: jad命令反编译代码

$ jad  --source-only  com.kfit.jvmfullgc.controller.HelloController > /data/tmp/HelloController.java

步骤2: 文本编辑器修改代码

       使用文本工具修改在/data/tmp目录下的HelloController.java文件。

 

步骤3: sc命令查找代码所在类的ClassLoader

$sc -d *HelloController | grep classLoaderHash

 

说明:

(1)sc是search class的简称,查找到所有JVM已经加载到的类。

       ① -d (details): 通过-d参数,可以打印出类加载的具体信息。

(2)grep 过滤信息。

 

步骤4: mc命令指定ClassLoader编译代码

$mc -c 18b4aac2 /data/tmp/HelloController.java  -d /data/tmp

说明:

(1)mc : Memory Compiler/内存编译器,编译.java文件生成.class,通过-c来指定classloader。

 

步骤5: redefine命令热更新代码

$ redefine  /data/tmp/com/kfit/jvmfullgc/controller/HelloController.class

说明:使用redefine热加载class。

检验热更新结果,重新访问看下是否正常了。

 

 

 

悟纤 CSDN认证博客专家 知远公司创始人 架构师 访问1000万+
「公众号SpringBoot」:
①阿里巴巴前高级研发工程师;
②估值20亿美金的Blued架构师;
③北京知远公司创始人;
④浙江甄才公司架构师;
⑤云课堂学员10000+;
⑥博客访问量1000万+;
⑦10年互联网行业从业;
⑧360万的访问《从零开始学SprngBoot》作者;
⑨技术加盟多个独立项目。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页
实付 19.89元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值