windows环境下使用arthas不启动服务替换文件

场景:

windows环境,如果现场环境客户正在使用项目,如果要替换项目中的一个class文件,但是又不能重启服务改怎么处理,今天介绍使用arthas中的retransform命令动态替换及使用注意的事项。

环境:

windows,arthas,测试项目 

替换前:

准备测试文件LoginController.class,准备对如下方法进行简单的修改替换

启动

启动时加上-Dfile.encoding=UTF-8 保证控制台不会出现中文乱码

java -Dfile.encoding=UTF-8 -jar arthas-boot.jar

反编译:

将线上LoginController.class文件使用jad反编译到指定的文件中

jad --source-only com.gisquest.platform.rest.sys.LoginController > D:/temp/LoginController.java

获取类加载器 

获取线上加载LoginController.class的类加载hashcode.

sc -d com.gisquest.platform.rest.sys.LoginController

对反编译的文件修改

mc内存编译

使用mc命令将反编译的.java文件变成对应的.class文件

mc -c 27647ad0 D://temp/LoginController.java -d D://temp

Memory compiler error, exception message: Compilation Error

本地编译:

这里没有成功只能放到项目中编译了

 redefine命令热加载

验证

观察到内存中加载的已经是修改后的方法,因此验证成功!!!!

相关问题及验证

问题一:mc命令将修改后的loginController.java文件编译成LoginController.class时为什么报错

问题二:redefine 和 retransform命令热加载区别

相同点:

  • 正在跑的函数,没有退出不能生效,比如下面新增加的System.out.println,只有run()函数里的会生效

  • 不允许新增加 field/method

  • 加载外部的.class 文件,redefine jvm 已加载的类。

区别:

redefine命令和jad/watch/trace/monitor/tt等命令会冲突。执行完redefine之后,如果再执行上面提到的命令,则会把redefine的字节码重置

如果多次执行 retransform 加载同一个 class 文件,则会有多条 retransform entry.

推荐使用retransform命令

拓展

sc 命令搜索jvm加载的类信息

 sc *LoginController 

sc *LoginController -d | grep classLoaderHash

sm命令搜索jvm加载的方法信息

sm查询一个类中的所有方法

sm *LoginController -d  | grep method-name

sm查询一个类中的所有方法中具体一个方法

sm *LoginController -d  | grep method-name | grep sendVerificationCode

ognl命令

1.查看类中静态变量的信息

ognl @com.gisquest.platform.rest.sys.LoginController@deptUserProperties

原因是LoginController存在多个类加载器,需要指定classLoaderHash

如果静态变量是集合,可查看集合中key对应的value信息

 ognl -c 6375bfd4 "@com.gisquest.platform.rest.sys.LoginController@deptUserProperties['id']"

注意:

@class@Field时,引号的使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/216626.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qgis添加arcgis的FeatureServer

左侧浏览器-ArcGIS要素服务器-新建连接 http://sampleserver6.arcgisonline.com/arcgis/rest/services/ 展开-双击即可

AI 视频 | Stable Video Diffusion 来了!(附体验地址)

1. 介绍 11 月 21 日,Stability AI 推出了 Stable Video Diffusion,这是 Stability AI 的第一个基于图像模型 Stable Diffusion 的生成式视频基础模型。 目前 Stability AI 已经在 GitHub 上开源了 Stable Video Diffusion 的代码,在 Huggin…

分布式篇---第六篇

系列文章目录 文章目录 系列文章目录前言一、说说什么是漏桶算法二、说说什么是令牌桶算法三、数据库如何处理海量数据?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码…

Ubuntu18.4中安装wkhtmltopdf + Odoo16配置【二】

deepin Linux 安装wkhtmltopdf 1、先从官网的链接里下载linux对应的包 wkhtmltopdf/wkhtmltopdf 下载需要的版本,推荐版本,新测有效: wkhtmltox-0.12.4_linux-generic-amd64.tar.xz 2、解压下载的文件 解压后会有一个wkhtmltox文件夹 3…

MySQL的体系结构与SQL的执行流程

文章目录 前言体系结构SQL语句的执行流程1、连接MySQL2、查询缓存3、解析SQL语句4、优化SQL语句5、执行SQL语句 总结 前言 如果你在使用MySQL时只会写sql语句的,那么你应该看一下《MySQL优化的底层逻辑》。如果你只了解到sql是如何优化的,那么你应该通过…

【深度学习】因果推断与机器学习

2023年初是人工智能爆发的里程碑式的重要阶段,以OpenAI研发的GPT为代表的大模型大行其道,NLP领域的ChatGPT模型火爆一时,引发了全民热议。而最新更新的GPT-4更是实现了大型多模态模型的飞跃式提升,它能够同时接受图像和文本的输入…

计算机组成原理-固态硬盘SSD

文章目录 总览机械硬盘vs固态硬盘固态硬盘的结构固态硬盘与机械硬盘相比的特点磨损均衡技术例题 总览 机械硬盘vs固态硬盘 固态硬盘采用闪存技术,是电可擦除ROM 下图右边黑色的块块就是一块一块的闪存芯片 固态硬盘的结构 块大小16KB~512KB 页大小512B~4KB 对固…

BUUCTF [MRCTF2020]ezmisc 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。 感谢Galaxy师傅供题。 密文: 下载附件,解压得到.png图片。 从这里也可以看出图片经过修改,无法正常显示。 解题思路: 1、在010 E…

PyQt6运行QTDesigner生成的ui文件程序

2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计18条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~、第2讲 PyQt6库和工具库Q…

CH01_适应设计模式

Iterator模式(迭代器模式) 迭代器模式(Iterator),提供一种方法,顺序访问一个聚合对象中各个元素,而不是暴露该对象的内部表示。 类图结构 说明 Iterator(迭代器) 该角色负责定义按…

2023.11.25更新关于mac开发APP(flutter)的笔记与整理(实机开发一)

我自己写的笔记很杂,下面的笔记是我在chatgpt4的帮助下完成的,希望可以帮到正在踩坑mac开发APP(flutter)的小伙伴 目标:通过MAC电脑使用flutter框架开发一款适用于苹果手机的一个APP应用 本博客的阅读顺序是&#xf…

1、分布式锁实现原理与最佳实践(一)

在单体的应用开发场景中涉及并发同步时,大家往往采用Synchronized(同步)或同一个JVM内Lock机制来解决多线程间的同步问题。而在分布式集群工作的开发场景中,就需要一种更加高级的锁机制来处理跨机器的进程之间的数据同步问题&…