Arthas——热替换
Arthas 热替换
就在昨天,一个运行多年的系统出问题了,一个关键的点没有日志打印,怎么办,替包? 不合适。 于是想到了Arthas的redefine支持加载.class文件。
热替换步骤
- 使用jad反编译并输出源码,命令如下:
jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
使用vi 命令修改UserController.java文件
使用sc拿到classLoader的Hash值
sc -d com.example.demo.arthas.user.UserController | grep classLoaderHashclassLoaderHash 2c20c3ff
- 使用mc命令编译修改过的UserController.java
mc -c 2c20c3ff /tmp/UserController.java -d /tmp
- 使用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——热替换相关推荐
- arthas classclassloader相关命令之二:jad、mc、redifine实现代码热更新(热替换)
jad mc mc就类似于javac redefine redefine只能修改现有方法,不能增加属性和方法 redefine的限制 案例:redefine结合jad.mc一起使用实现代码热替换 总结
- arthas 热更新
注意:如下几点情况无法进行arthas热更新: 增加.删除,修改了 field(字段) : attempted to add Or remove field; 增加.删除了 method (方法): ...
- 【webpack】-- 模块热替换
全称是Hot Module ReplaceMent(HMR),理解成热模块替换或者模块热替换都可以吧,和.net中的热插拔一个意思,就是在运行中对程序的模块进行更新.这个功能主要是用于开发过程中,对生 ...
- java 热替换 匿名类_Java 类的热替换
Java 类的热替换 -- 概念.设计与实现 构建基于 Java 的在线升级系统 孙 鸣 和 邓 辉 2010 年 1 月 14 日发布 Java ClassLoader 技术剖析 在本文中,我们将不 ...
- 如何利用 Arthas 热更新线上代码
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「Kirito的技术分享」 前言 本文是 ...
- vue+webpack热替换
项目地址:http://pan.baidu.com/s/1i5KCXBf 今天上午和同事完成了在mac上面调试了我的框架,最后发现问题出在window系统和mac系统在表示路径的时候出现问题,在解决这 ...
- java 热替换_class卸载、热替换和Tomcat的热部署的分析
所以一个class被一个ClassLoader实例加载过的话,就不能再被这个ClassLoader实例再次加载(这里的加载指的是,调用了defileClass(...)放方法,重新加载字节码.解析.验 ...
- webpack 热替换和热重载
热替换是利用h5 的新事件 eventSource 实现的,服务器向前端单向推送消息的事件,服务推送给前端,修改的文件 前端请求到该修改的文件插入到页面中,然后执行该js,页面局部渲染出来,原先的执行 ...
- 再谈Erlang代码热替换
Erlang一个非常值得称道的特性就是代码热替换(Hot Code Sawpping),我们在调用函数时,通过M:F(A)的方式,可以保证总是加载最新的代码. 在<Erlang程序设计>中 ...
- Java 类的热替换---转载
构建基于 Java 的在线升级系统 Java ClassLoader 技术剖析 在本文中,我们将不对 Java ClassLoader 的细节进行过于详细的讲解,而是关注于和构建在线升级系统相关的基础 ...
最新文章
- 开源库nothings/stb的介绍及使用(图像方面)
- python 函数的*args,**kwargs
- Windows10怎么在当前目录,打开cmd命令窗口?
- linux系统中cache清理/释放命令
- 几个重要的java数据库访问类和接口
- 如何制作出让女朋友满意的大片
- android fragment 弹出对话框,Android中使用Dialogfragment显示对话框
- Chapter 1. Asp.Net 概述
- node + ts读取csv文件为二维数组
- 关于在arm裸板编程时使用printf问题的解决方法
- JS - 移动设备终端的touch事件
- 关于qt使用sqlist数据库的注意事项
- Ember component
- 服务器指的是系统,服务器操作系统指的是什么
- seaborn小提琴图
- 印象笔记html标签删除吗,我用了9年印象笔记,打算彻底放弃,直到……
- java.lang.IllegalStateException: Underflow in restore - more restores than saves
- 知识科普:5G是什么
- 什么样的企业是负责任的企业?
- centos7查看磁盘io