Arthas热替换class文件

本文详细介绍了如何使用Artas工具进行类加载器查询、字节码dump、源码反编译以及类文件的内存编译和替换。通过`classloader`、`dump`、`jad`、`mc`、`redefine`和`retransform`等命令,实现了在运行时对Java类的动态操作。同时,文章还提供了替换类文件的完整步骤,包括从反编译到重新加载新类的整个过程。
摘要由CSDN通过智能技术生成

1、Arthas常用命令

      arthas操作class、classloader的常用命令

(1)classloader - 查看 classloader 的继承树,urls,类加载信息,使用 classloader 去 getResource
(2)dump - dump 已加载类的 byte code 到特定目录
(3)jad - 反编译指定已加载类的源码
(4)mc - 内存编译器,内存编译.java文件为.class文件
(5)redefine - 加载外部的.class文件,redefine 到 JVM 里
(6)retransform - 加载外部的.class文件,retransform 到 JVM 里
(7)sc - 查看 JVM 已加载的类信息
(8)sm - 查看已加载类的方法信息

2、class文件替换

      替换calss文件步骤

     (1)运行应用服务

      (2)启动artahs服务  

         java -jar  arthas-boot.jar 

        可以查看到第一部启动的1871的java进程,直接输入进程的序号

       (3)jad命令反编译class

 jad  --source-only org.cn.fcw.control.BootController  > /home/master/appweb/output/BootController.java

        将内存中的BootController的class文件反编译成java源文件输入到指定目录

        (4)sc查询指定类的classloader

sc  -d   org.cn.fcw.control.BaseController  |  grep  classLoaderHash

           查询类加载器的hash值

         (5)编译新的class文件

          修改源码中的问题,将修改后的java源文件编译成class文件

           mc  -c    类加载器hash    java源码全路径   -d   输出路径

         (7)重新加载class文件

         redefine将新编译的class文件加载到内存中

 redefine    /home/master/appweb/output/org/cn/fcw/control/BootController.class

          至此class文件替换完成

   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值