标签:redefine 代码 更新 命令 线上 Arthas
一般线上问题比开发环境的问题更难解决,一个主要的原因便在于开发态可以任意 debug 断点调试,而线上环境一般不允许远程调试,所以在实践中,我一般习惯用 Arthas 来定位线上的问题。
Arthas 是阿里巴巴开源的 Java 应用诊断利器
Arthas 可以完成很多骚操作,今天给大家介绍的 Arthas 诊断技巧便是 – 热更新线上代码
前置需求
排查发现线上代码HelloWorld.java文件中某个方法的代码有NPE问题,需要通过arthas热更解决
实施步骤
1、首先准备好要热更的字节码文件,可本地通过IDE编译生成,也可通过arthas提供的jad和mc命令配合生成
2、通过sc命令查找类的加载器
3、通过redefine命令热更
热更新注意事项
redefine 特别说明
redefine
命令和 jad
/watch
/trace
/monitor
/tt
等命令会冲突。
执行完 redefine
之后,如果再执行上面提到的命令,则会把 redefine
的字节码重置。
原因是 jdk 本身 redefine 和 Retransform 是不同的机制,同时使用两种机制来更新字节码,只有最后修改的会生效。
条件限制
使用热更新功能有一些条件限制,我们只能用它来修改方法内部的一些业务代码,如果我们出现了以下任意一种情况,那么热更新就会执行失败:
- 增加类属性(类字段);
- 增加或删除方法;
- 替换正在运行的方法。
标签:redefine,代码,更新,命令,线上,Arthas 来源: https://www.cnblogs.com/angryprogrammer/p/16453780.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。