Arthas非常重要的命令redefine,主要作用是加载外部的.class文件,用来替换JVM已经加载的类,总结起来就是实现了Java的热更新。
redefine在一下几种情况中会失败:1、增加了field;2、增加了method;3、替换正在运行的方法。
前两个比较好理解,第三个意思就是这个方法必须结束之后才会被替换,如果有个方法开始运行之后就不会跳出,那么这个方法所在的类是无法被替换的,类似无限循环的方法。

场景需求
举个例子,在线上代码某个class的方法添加日志输出,修改方法返回结果,但是,又不想直接修改class

只需操作如下:
1.上传修改后的class文件到服务器任意路径,比如:/usr/local/arthas/file/ParserFileService.class
2.下载 Arthas(阿尔萨斯)
3.根据java程序 pid 运行arthas,# ./as.sh 4334
4.通过redefine加载修改后的class文件,$ redefine /data/web/ParserFileService.class
5.验证效果,结束
6.这个方式只是修改运行时内存,class文件并没有改变,服务重启就失效了,如需永久生效需替换原文件

如下效果是添加简单的脚本,自动依据pid运行arthas,省去每次专门查看pid的过程

脚本如下:
脚本放置与需上传class文件同级目录即可。

#!/bin/bash
PID=`ps aux|grep [p]roject|awk '{print $2}'`if [ $? -eq 0 ];
thenecho PID is $PID.cd /usr/local/arthas/sh as.sh $PID
elseecho PID not exist.
fi

注:grep [p]roject等同于 grep -v project;project是项目名
————————————————
版权声明:本文为CSDN博主「IT_狂奔者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chj_1224365967/article/details/107617415

arthas命令redefine实现Java热更新相关推荐

  1. 一文搞定Java热更新

    Java热更新 在持续交付的时代,重新部署一个新的版本只需要点击一下按钮.但在有的情况下,重新部署过程可能比较复杂,停机是不被允许的.所以JVM提供了另外一种选择:在不重启应用的前提下进行小幅改动,又 ...

  2. java 热更新class_线上java热更新代码实现

    游戏上线后难免会有功能性bug,这些bug很多只做一些小的改动即可修复.设想假如每次有bug修复之后,都要重启服务器,势必会导致部分玩家流失,对游戏产生不好的影响.在这个背景下,代码热更新还是很有必要 ...

  3. Java 热更新 加载class和jar

    1.首先了解下java几个加载器的基本原理: Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的.系统提供的类加载器主要有下面三个:       引 ...

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

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

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

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

  6. Cordova App 热更新 超详细教程

    前言: Cordova热更新的一些要点: 1.在不用重新安装App的情况下,更新你的代码.可以越过应用商店的审核步骤. 2.涉及的插件依赖发生变化时,无法使用热更新,需要去应用商店下载最新版本安装. ...

  7. 【热更新】游戏热更新方案

    游戏热更新方案 热更新演化 热更新方案 [1] 进程切换 1.1 利用fork.exec切换 1.2 利用网关切换 1.3 微服务 - 进程切换注意要点 [2] 动态库替换 [3] 脚本语言热更新 热 ...

  8. webpack 4 热更新后台成功更新浏览器不刷新

    上一篇文章写的是 webpack4 打包,但是每次修改代码都要重新执行一次打包命令,实在是麻烦,本文将推出我的实现,仅做参考!!! 1.安装 webpack-dev-server npm instal ...

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

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

最新文章

  1. Spring MVC+Spring+Mybatis实现支付宝支付功能(附完整代码)
  2. 【干货】NLP中对困惑度感到困惑?
  3. 可变车道怎么走不违章_可变车道怎么才能正确通行?老司机来告诉你什么才是正确的走法。...
  4. SAP中手工配置Delivery打印message
  5. 一个 IT 青年北漂四年的感悟
  6. python今日内容_python笔记15
  7. python import from class_彻底搞懂Python 中的 import 与 from import
  8. VS转换到 COFF 期间失败 文件无效或损坏
  9. day_05、内置函数、匿名函数
  10. input失去焦点和获得焦点jquery焦点事件
  11. python如何跳出函数_python如何跳出函数
  12. 关于RH850系统时钟初始化的分析解读
  13. SSR for mac with free download addresses
  14. 巴菲特致股东的信pdf_巴菲特历年股东大会股东信问答实录集合(共7份)
  15. qemu-img命令
  16. 使用 Google Guava Striped 实现基于 Key 的并发锁
  17. 【NLP】余弦定理计算文本相似度
  18. 如何创建phpinfo查看php信息?
  19. 工作经验分享-vivo链路监控
  20. python自动化生成请假条

热门文章

  1. leetcode 47. 全排列 II 思考分析
  2. Java GregorianCalendar getTimeZone()方法与示例
  3. Java StringBuffer char charAt(int index)方法与示例
  4. python安全攻防---信息收集---IP查询
  5. 远控免杀4---Evasion免杀
  6. win10必须禁用的服务_7寸屏的迷你电脑,就算是8GB运行内存,也必须关闭的系统选项...
  7. MTD和 uboot中的bootargs 下属 mtdparts
  8. gdb 10.2的安装
  9. 接口的抽象与实现(概述)
  10. 07-图6 旅游规划 (25 分)