Arthas redefine(加载外部的.class文件,redefine到JVM里 )
文章目录
- 二、命令列表
- 2.2 class/classloader相关命令
- 2.2.3 redefine(加载外部的.class文件,redefine到JVM里 )
- 举例1:加载新的代码,jad/mc 命令使用
- 举例2:上传 .class 文件到服务器的技巧
- 本人其他相关文章链接
二、命令列表
2.2 class/classloader相关命令
2.2.3 redefine(加载外部的.class文件,redefine到JVM里 )
提示:
目的
:常用来解决线上服务不停止,修改代码操作
注意点1
:redefine 的 class 不能修改、添加、删除类的 field 和 method,包括方法参数、方法名称及返回值。
注意点2
:如果 mc 失败,可以在本地开发环境编译好 class 文件,上传到目标系统,使用 redefine 热加载 class
注意点3
:目前 redefine 和 watch/trace/jad/tt 等命令冲突,以后重新实现 redefine 功能会解决此问题
注意点4
:redefine 后的原来的类不能恢复,redefine 有可能失败(比如增加了新的 field),参考 jdk 本身的文档。
注意点5
:reset
命令对redefine
的类无效。如果想重置,需要redefine
原始的字节码。
注意点6
:redefine
命令和jad
/watch
/trace
/monitor
/tt
等命令会冲突。执行完redefine
之后,如果再执行上面提到的命令,则会把redefine
的字节码重置。 原因是 jdk 本身 redefine 和 Retransform 是不同的机制,同时使用两种机制来更新字节码,只有最后修改的会生效。
参数说明:
参数名称 | 参数说明 |
---|---|
[c:] | ClassLoader 的 hashcode |
[classLoaderClass:] | 指定执行表达式的 ClassLoader 的 class name |
举例1:加载新的代码,jad/mc 命令使用
# 1、使用jad反编译 demo.MathGame 输出到 /opt/MathGame.java
jad --source-only demo.MathGame > /opt/MathGame.java
# 2、把上一步反编译的代码修改完成后,使用mc在内存中对新的代码进行编译
mc /opt/MathGame.java -d /opt
# 3、使用redefine命令加载新的字节码
redefine /opt/demo/MathGame.class
举例2:上传 .class 文件到服务器的技巧
使用mc
命令来编译jad
的反编译的代码有可能失败。可以在本地修改代码,编译好后再上传到服务器上。有的服务器不允许直接上传文件,可以使用base64
命令来绕过。
-
在本地先转换
.class
文件为 base64,再保存为 result.txtbase64 < Test.class > result.txt
-
到服务器上,新建并编辑
result.txt
,复制本地的内容,粘贴再保存 -
把服务器上的
result.txt
还原为.class
base64 -d < result.txt > Test.class
-
用 md5 命令计算哈希值,校验是否一致
本人其他相关文章链接
1.Arthas 全攻略:让调试变得简单
2.Arthas dashboard(当前系统的实时数据面板)
3.Arthas thread(查看当前JVM的线程堆栈信息)
4.Arthas jvm(查看当前JVM的信息)
5.Arthas sysprop(查看和修改JVM的系统属性)
6.Arthas sysenv(查看JVM的环境变量)
7.Arthas vmoption(查看和修改 JVM里诊断相关的option)
8.Arthas getstatic(查看类的静态属性 )
9.Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
10.Arthas logger(查看 logger 信息,更新 logger level)
11.Arthas mbean(查看 Mbean 的信息)
12.Arthas memory(查看 JVM 内存信息)
13.Arthas ognl(执行ognl表达式)
14.Arthas perfcounter(查看当前 JVM 的 Perf Counter 信息)
15.Arthas vmtool(从 jvm 里查询对象,执行 forceGc)
16.Arthas jad(字节码文件反编译成源代码 )
17.Arthas mc(Memory Compiler/内存编译器 )
18.Arthas redefine(加载外部的.class文件,redefine到JVM里 )
19.Arthas classloader (查看 classloader 的继承树,urls,类加载信息)
20.Arthas sc(查看JVM已加载的类信息 )
21.Arthas sm(查看已加载类的方法信息 )
22.Arthas monitor(方法执行监控)
23.Arthas stack (输出当前方法被调用的调用路径)
24.Arthas trace (方法内部调用路径,并输出方法路径上的每个节点上耗时)
25.Arthas tt(方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测)
26.Arthas watch (方法执行数据观测)
27.Arthas profiler(使用async-profiler对应用采样,生成火焰图)
相关文章:

Arthas redefine(加载外部的.class文件,redefine到JVM里 )
文章目录 二、命令列表2.2 class/classloader相关命令2.2.3 redefine(加载外部的.class文件,redefine到JVM里 )举例1:加载新的代码,jad/mc 命令使用举例2:上传 .class 文件到服务器的技巧 本人其他相关文章…...
C++教程(三):c++常用的配置文件类型
目录 1. INI 文件 2. JSON 文件 3. YAML 文件 4. XML 文件 5. TOML 文件 6. 二进制配置文件(Protocol Buffers, MessagePack, Avro 等) 总结 在 C 项目中,常用的配置文件类型有多种选择,具体选择取决于项目的复杂性、可读性…...
Arduino Uno控制雨滴传感器模块的设计方案
以下是Arduino Uno控制雨滴传感器模块的设计方案: 一、硬件准备: 1. Arduino Uno 开发板一块。 2. 雨滴传感器模块一个。 3. 杜邦线若干。 4. 9V直流电源一个。 二、硬件连接: 1. 将Arduino Uno板的Vin引脚、GND引脚分别连接到9V直流电…...
华为常见命令手册
常见命令 display ip interface brief —> 查看设备上的每个接口的IP地址【地址/掩码/状态】 display interface gi0/0/0 → 查看该接口的MAC 地址 ipconfig → 查看 PC 上面的 IP地址 display arp → 查看设备的 ARP 表 arp -a → 查看 PC 上面的 ARP 表 display m…...

TinyAP:使用TinyML对抗Wi-Fi攻击的智能接入点
论文标题: 英文:TinyAP: An intelligent Access Point to combat Wi-Fi attacks using TinyML中文:TinyAP:使用TinyML对抗Wi-Fi攻击的智能接入点 作者信息: Anand Agrawal 和 Rajib Ranjan Maiti,来自印…...

grafana频繁DataSourceError问题
背景 随着 Grafana 数据量的不断增加,逐渐暴露出以下问题: Grafana 页面加载缓慢;Grafana 告警频繁出现 DatasourceError 错误。 对于第一个问题,大家可以参考这篇文章:Grafana 加载缓慢的解决方案。 不过…...

python-ds:Python 中的数据结构库(适用于面试的数据结构和算法合集)
在软件开发中,数据结构是组织和存储数据的方式,对算法的效率和程序的性能至关重要。Python 提供了许多内置的数据结构,但在一些复杂的应用场景中,原生数据结构可能无法满足特定需求。这时,一个功能强大、易于使用的数据…...
AccessoriesqueryController
目录 1、 AccessoriesqueryController 1.1、 库存配件查询 1.2、 查询仓库 1.2.1、 //把数据库数据加到表格:跟默认然一行数据进行合并 1.3、 /// 查询 1.3.1、 配件编码查询 1.3.2、 配件名称查询 1.3.3、 配件类型查询 AccessoriesqueryControlle…...

M3u8视频由手机拷贝到电脑之后,通过potplayer播放报错找不到文件地址怎么解决?
该文章前面三节主要介绍M3u8视频是什么,视频播放错误(找不到地址)的解决方法在后面 M3U8是一种多媒体播放列表文件格式,主要用于流媒体播放。 一、文件格式特点 1. 文本文件:M3U8是一个采用 UTF-8 编码的文本文件,这意味着它可…...

【分布式微服务云原生】windows+docker+mysql5.7.44一主一从主从复制
目录 1. 主库设置2. 从库设置3. 验证主从复制内容汇总表格 摘要: 在Windows系统上通过Docker部署MySQL主从复制,以下是详细的步骤和命令,帮助你设置一主一从的MySQL复制环境。 1. 主库设置 步骤1:运行MySQL主库容器 docker run …...
鸿蒙NEXT开发-界面渲染(条件和循环)(基于最新api12稳定版)
注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…...

TypeScript 设计模式之【状态模式】
文章目录 状态模式:优雅切换的交通信号灯状态模式的奥秘状态模式有什么利与弊?如何使用状态模式来优化你的系统代码实现案例状态模式的主要优点状态模式的主要缺点状态模式的适用场景总结 状态模式:优雅切换的交通信号灯 当你站在繁忙的十字路口&#…...
MongoDB 聚合管道
参考: 聚合管道 - MongoDB 手册 v7.0 介绍 聚合管道由一个或多个处理文档的阶段组成: 每个阶段对输入文档执行一个操作。例如,某个阶段可以过滤文档、对文档进行分组并计算值。 从一个阶段输出的文档将传递到下一阶段。 一个聚合管道可以返回针对文档…...

python-patterns:Python 设计模式大全
python-patterns 是一个开源的 Python 项目,它提供了各种经典的设计模式的 Python 实现。设计模式是一种针对常见软件设计问题的可复用解决方案,通过使用设计模式,开发者可以编写出结构更加合理、易于维护和扩展的代码。 Python 是一门动态语…...
Nginx编译所需基本库pcre、zlib、openssl
一、基本库介绍 pcre:(Perl Compatible Regular Expressions) 是一个用 C 语言编写的正则表达式库,用于进行文本匹配和搜索。它提供了与 Perl 正则表达式兼容的功能,并且广泛用于许多不同的软件项目中,如网…...
C#进阶:探索嵌套类、匿名类及对象初始化器的强大运用
在C#中,嵌套类、匿名类以及对象初始化器是几种强大的特性,它们可以极大地提高代码的可读性和灵活性。下面分别介绍这些特性的运用。 1. 嵌套类 嵌套类是指定义在另一个类内部的类。内部类可以访问其外围类的所有成员(包括私有成员ÿ…...
匈牙利算法模板
P3386 【模板】二分图最大匹配 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路:最模板的一集.还未匹配则匹配,否则之前一个给现在这个让位置. int n,m,e; vector<int> vct[505]; int match[505]; bool vis[505]; bool mark[505][505]; bool dfs(int s)…...

ubuntu 安装harbor
#安装包 wget https://github.com/goharbor/harbor/releases/download/v2.10.3/harbor-offline-installer-v2.10.3.tgz wget https://github.com/goharbor/harbor/releases/download/v2.10.3/harbor-offline-installer-v2.10.3.tgz.asc#导入签名公钥 gpg --keyserver hkps://ke…...
Python/大数据/机器识别毕业设计选题题目推荐
基于Python和Diango在线购物商城系统报告文档指导搭建视频 基于深度学习的人脸识别与管理系统,Python实现 基于Python/机器学习链家网新房数据可视化及预测系统 Python豆瓣电影情感分析推荐系统爬虫可视化,过滤算法 基于python的django框架生鲜商城管…...
基于Python的人工智能应用案例系列(17):LSTM正弦波预测
概述 本案例展示了如何使用LSTM(长短期记忆网络)来预测正弦波序列的未来值。由于正弦波具有周期性,传统的神经网络难以准确预测其上升或下降趋势,而LSTM则能够通过学习值的模式来进行更精准的预测。本案例将训练LSTM模型并预测正弦…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...