注意:如下几点情况无法进行arthas热更新:

  • 增加、删除,修改了 field(字段) ;

    • attempted to add Or remove field;
  • 增加、删除了 method (方法);

    • redefine error! java.lang.UnsupportedOperationException: class redefinition failed: attempted to add a method
  • 替换正在运行的方法;

  • 编译时会报错:

    • 目标类中存在Lombok,可在IDEA中直接refactor-》DeLombok-》all-lombok-annotations来将类中的lombok去除;

    • 不要给抽象父类的方法加上@override不然还是得重新打包并重启,不能做热更新;

实验目标:由于业务逻辑变更,对目标类进行修改,并热更新上线;

这里就以正常的问题排查流程来走了;

  1. 发现部分接口出现问题,启动arthas;
# 下载arthas的包
wget https://arthas.aliyun.com/arthas-boot.jar
# 启动
java -jar arthas-demo.jar
  1. 查询对应请求的controller层并查看其异常
# 查看请求参数和堆栈 支持通配符 *
# watch [类路径] [方法名称] [返回值表达式] [-x 2 将结果参数展开]watch com.xxxxx.server.component* * '{params,throwExp}' -x 2

返回值表达式中它实际上是一个ognl表达式,它支持一些内置对象:loader、clazz、method、target、params、returnObj、throwExp、isBefore、isThrow、isReturn

# 这里随便写一个来进行查询
# 回显如下
[arthas@14016]$ watch com.xxxxx.server.component.xxxxxComponent * '{params,throwExp}' -x 2
Press Q or Ctrl+C to abort.
Affect(class count: 2 , method count: 61) cost in 191 ms, listenerId: 4
method=com.xxxxx.server.component.xxxxxComponent.activateCaChe location=AtExit
ts=2022-09-20 16:53:18; [cost=0.1266ms] result=@ArrayList[@Object[][@String[参数详情],@String[参数详情],],null,
]

回显参数会以数组的形式展示出来:result=@ArrayList[]

  1. 假定现在我们知道出错是什么原因了,将目标类进行反编译,并将java文件放到对应文件夹目录下(也可以跳过此步直接使用项目中现成的java类进行后续操作)
jad --source-only com.xxxxx.server.component.xxxxxComponent > /tmp/xxxxxComponent.java
  1. 根据修改规则以及注意事项修改目标类,并进行重新编译;
# mc [--classLoaderClass 指定的类加载器(可通过classLoaderHash代替)] [要修改的参数路径] [-d 设置class文件的目标目录(后续redefine要用到)]
mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/xxxxxComponent.java -d /tmp
  1. 热更新;
# 重新定义类 redefine [编译后的类路径]
redefine /tmp/com/xxxxx/server/component/xxxxxComponent.class
  1. 校验修改结果;

arthas 热更新相关推荐

  1. 使用Arthas热更新时,lombok注解导致mc命令编译失败

    看Arthas文档,其中代码热更新vb.net教程功能很吸引人,用文档的demo项目热更新,没有c#教程任何问题. 但是,用公司项目的代码一试,mc编译时报错. 网上查了很多博客,有python基础教 ...

  2. 如何利用 Arthas 热更新线上代码

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「Kirito的技术分享」 前言 本文是 ...

  3. 漫画:Java如何实现热更新?

    Arthas(阿尔萨斯)是 Alibaba 开源的一款 Java 诊断工具,使用它我们可以监控和排查 Java 程序,然而它还提供了非常实用的 Java 热更新功能. 所谓的 Java 热更新是指在不 ...

  4. java 极客漫画_漫画:Java如何实现热更新?

    Arthas(阿尔萨斯)是 Alibaba 开源的一款 Java 诊断工具,使用它我们可以监控和排查 Java 程序,然而它还提供了非常实用的 Java 热更新功能. 所谓的 Java 热更新是指在不 ...

  5. 热更新原理及实践注意

    首先要说明几个概念,不要混用,热部署,热加载: 热部署:就是已经运行了项目,更改之后,不需要重新tomcat,但是会清空内存,重新打包,重新解压war包运行,可能好处是一个tomcat多个项目,不必因 ...

  6. 记 Arthas 实现一次 CPU 排查与代码热更新

    作者 | 何波 [Arthas 官方社区正在举行征文活动,参加即有奖品拿~点击投稿] 1.前言 背景 线上代码经常会出现 CPU 占用过高的情况,按以往经验我会使用 top 指令,进一步借助于 jst ...

  7. ms查约束具体代码_记 Arthas 实现一次 CPU 排查与代码热更新

    简介:线上代码经常会出现 CPU 占用过高的情况,按以往经验我会使用 top 指令,进一步借助于 jstack 去查看具体信息从而进行问题排查,但基本上都逃不过需要重新发包的局面,及时是一个增量包,应 ...

  8. arthas命令redefine实现Java热更新

    Arthas非常重要的命令redefine,主要作用是加载外部的.class文件,用来替换JVM已经加载的类,总结起来就是实现了Java的热更新. redefine在一下几种情况中会失败:1.增加了f ...

  9. 热更新机制的实现_记 Arthas 实现一次 CPU 排查与代码热更新

    简介:线上代码经常会出现 CPU 占用过高的情况,按以往经验我会使用 top 指令,进一步借助于 jstack 去查看具体信息从而进行问题排查,但基本上都逃不过需要重新发包的局面,及时是一个增量包,应 ...

最新文章

  1. python实操培训_python实训day1
  2. 上接稳扎稳打Silverlight(20) - 2.0通信之WebClient, 以字符串的形式上传/下载数据
  3. 谈谈设计不足(under-engineering)与过度设计(over-engineering)
  4. python3菜鸟教程中文-我的python学习方法和资源整理,干货分享
  5. CSS3 Filter的十种特效
  6. Delphi中静态方法重载还是覆盖的讨论
  7. 阅读笔记一之《软件需求与分析》
  8. spring 构造函数注入_Spring依赖注入–字段vs设置器vs构造函数注入
  9. 在DrawingVisual上绘制圆形的进度条,类似于IOS系统风格。
  10. 金山云肖江:5G推动智慧人居产业到达新高度
  11. java中序列化一个对象保存在文件中的简单过程
  12. Java用while求100以内奇数和
  13. DDR4 vs LPDDR4 vs LPDDR4x:有什么区别?
  14. 部队室内靶场有哪些硬件设备和强制性存在的系统
  15. Photoshop插件-证件照-2寸裁剪-2寸排版-脚本开发-PS插件
  16. Qt之Cannot retrieve debugging output.
  17. 计算机考试显示延时一分钟,电脑显示延迟解决方法教程
  18. 基于ndis的防火墙源码供大家赏析firewall c
  19. Jigsaw拼图游戏
  20. 荣耀30s刷鸿蒙,荣耀30S“超过”苹果XS,靠华为鸿蒙框架优化能力

热门文章

  1. 磁盘挂载报错/dev/sdb1 is apparently in use by the system
  2. 魔兽随身助手选服务器,魔兽世界军团再临随身助手App常见问题官方解答汇总
  3. (MATLAB代码分享,可运行)基于改进遗传算法的柔性作业车间调度优化研究
  4. Office2016、visio2016安装的注意事项
  5. [云原生专题-29]:K8S - 核心概念 - 名字空间/命名空间概念详解与主要操作案例
  6. 软件架构师的培养与认证
  7. DateSet和BindingNavigator合作的产物
  8. 二十岁,无资本,无未来 --《意林》
  9. 前端,java后端开发,数据分析师应该掌握的技术,不要盲目跟风
  10. BeautifulSoup 与 Xpath