Arthas 热替换

 就在昨天,一个运行多年的系统出问题了,一个关键的点没有日志打印,怎么办,替包? 不合适。 于是想到了Arthas的redefine支持加载.class文件。

热替换步骤

  1. 使用jad反编译并输出源码,命令如下:
    jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
  1. 使用vi 命令修改UserController.java文件

  2. 使用sc拿到classLoader的Hash值

    sc -d  com.example.demo.arthas.user.UserController | grep classLoaderHashclassLoaderHash   2c20c3ff
  1. 使用mc命令编译修改过的UserController.java
    mc -c 2c20c3ff  /tmp/UserController.java -d /tmp
  1. 使用redefine加载字节码到内存
    redefine /tmp/com/example/demo/arthas/user/UserController.class

可能遇到的问题

  • 保证你的arthas运行环境是jdk而不是jre(最好环境变量中配置也是jdk)
  • mc命令如果执行不成功,那么直接在本地修改代码,编译后将.java文件上传至服务器
  • 执行redefine后,不要再使用jad去验证是否已经成功加载你的修改,使用jad会覆盖你的修改,使你的修改无效。(redefine命令和jad/watch/trace/monitor/tt等命令会冲突。执行完redefine之后,如果再执行上面提到的命令,则会把redefine的字节码重置)
  • 如果你看到了这篇博文,官方已经推出了一个新的命令 retransform来代替redefine,到官网下载一个最新的全量包使用就好。
  • retransform命令
  retransform  /tmp/com/example/demo/arthas/user/UserController.class

官网redefine说明

另外需要注意:

Arthas——热替换相关推荐

  1. arthas classclassloader相关命令之二:jad、mc、redifine实现代码热更新(热替换)

    jad mc mc就类似于javac redefine redefine只能修改现有方法,不能增加属性和方法 redefine的限制 案例:redefine结合jad.mc一起使用实现代码热替换 总结

  2. arthas 热更新

    注意:如下几点情况无法进行arthas热更新: 增加.删除,修改了 field(字段) : attempted to add Or remove field; 增加.删除了 method (方法): ...

  3. 【webpack】-- 模块热替换

    全称是Hot Module ReplaceMent(HMR),理解成热模块替换或者模块热替换都可以吧,和.net中的热插拔一个意思,就是在运行中对程序的模块进行更新.这个功能主要是用于开发过程中,对生 ...

  4. java 热替换 匿名类_Java 类的热替换

    Java 类的热替换 -- 概念.设计与实现 构建基于 Java 的在线升级系统 孙 鸣 和 邓 辉 2010 年 1 月 14 日发布 Java ClassLoader 技术剖析 在本文中,我们将不 ...

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

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

  6. vue+webpack热替换

    项目地址:http://pan.baidu.com/s/1i5KCXBf 今天上午和同事完成了在mac上面调试了我的框架,最后发现问题出在window系统和mac系统在表示路径的时候出现问题,在解决这 ...

  7. java 热替换_class卸载、热替换和Tomcat的热部署的分析

    所以一个class被一个ClassLoader实例加载过的话,就不能再被这个ClassLoader实例再次加载(这里的加载指的是,调用了defileClass(...)放方法,重新加载字节码.解析.验 ...

  8. webpack 热替换和热重载

    热替换是利用h5 的新事件 eventSource 实现的,服务器向前端单向推送消息的事件,服务推送给前端,修改的文件 前端请求到该修改的文件插入到页面中,然后执行该js,页面局部渲染出来,原先的执行 ...

  9. 再谈Erlang代码热替换

    Erlang一个非常值得称道的特性就是代码热替换(Hot Code Sawpping),我们在调用函数时,通过M:F(A)的方式,可以保证总是加载最新的代码. 在<Erlang程序设计>中 ...

  10. Java 类的热替换---转载

    构建基于 Java 的在线升级系统 Java ClassLoader 技术剖析 在本文中,我们将不对 Java ClassLoader 的细节进行过于详细的讲解,而是关注于和构建在线升级系统相关的基础 ...

最新文章

  1. 开源库nothings/stb的介绍及使用(图像方面)
  2. python 函数的*args,**kwargs
  3. Windows10怎么在当前目录,打开cmd命令窗口?
  4. linux系统中cache清理/释放命令
  5. 几个重要的java数据库访问类和接口
  6. 如何制作出让女朋友满意的大片
  7. android fragment 弹出对话框,Android中使用Dialogfragment显示对话框
  8. Chapter 1. Asp.Net 概述
  9. node + ts读取csv文件为二维数组
  10. 关于在arm裸板编程时使用printf问题的解决方法
  11. JS - 移动设备终端的touch事件
  12. 关于qt使用sqlist数据库的注意事项
  13. Ember component
  14. 服务器指的是系统,服务器操作系统指的是什么
  15. seaborn小提琴图
  16. 印象笔记html标签删除吗,我用了9年印象笔记,打算彻底放弃,直到……
  17. java.lang.IllegalStateException: Underflow in restore - more restores than saves
  18. 知识科普:5G是什么
  19. 什么样的企业是负责任的企业?
  20. centos7查看磁盘io

热门文章

  1. php后端经历,后端学习路线,仅供参考,个人总结
  2. 无线路由如何快速设置WDS扩展网络
  3. element-ui el-dialog 的form 表单验证关闭时清除错误验证信息
  4. python 汉字 简繁体 转换方法
  5. vue v-modle实现组件之间的动态传值
  6. 为什么认真自学了NLP,面试还是回答不出问题
  7. 圆角半角数据库_SQL SERVER 全角和半角的解决方法
  8. 利用高德地图周边搜索api获取不同类型的餐厅推荐
  9. 曲率、曲率圆和曲率半径
  10. Window系统64位下的x86文件夹