阿里Java诊断工具 arthas - 生产环境反编译动态修改程序调试应用

一、arthas

上篇文章我们借助arthas监测线上系统的运行信息、排查程序运行缓慢问题,尽管这样已经非常好了,但是还是会有些问题,有时我们可能还需要查看方法中某个变量的内容,或者方法内某个计算的运行时长,通过前面讲的可能无法满足需求。

因此本片文章通过在不重启应用程序的情况下,反编译源码成java文件,并添加上自定义的打印逻辑,然后在编译回class文件加载到JVM中执行。

下面是上篇文章的地址:

https://blog.csdn.net/qq_43692950/article/details/122698295

二、环境准备

新建一个SpringBoot项目,并写入下面的controller:

@RestController
public class FanbianyiController {@GetMapping("/jadTest/{i}")public String jadTest(@PathVariable Integer i) throws InterruptedException {System.out.println("jadTest");String t = op1(i);return "t:" + t;}private String op1(int i) throws InterruptedException {i = i++;i=i*5;return op2(i);}private String op2(int i) throws InterruptedException {i = i*i;TimeUnit.SECONDS.sleep(1); // 模拟耗时计算i = i/2;return String.valueOf(i);}}

上面我们写了一个jadTest接口,并调用了op1方法,然后有调用了op2方法,假如我们想知道i在op1和op2方法中每一步的值,及op2中的第一个计算的执行时间,在不重启项目的情况下,现在好像看不到。

不过通过arthas就可以实现我们上面的需求,下面我们先对FanbianyiController进行反编译。

三、反编译源码

在arthas中通过 jad 就可以查看源码,并且还有高亮效果:

jad com.bxc.arthasdemo.controller.FanbianyiController

已经可以看到源码了,不过也将ClassLoader的信息也打印出来了,可以使用–source-only 来排除掉:

jad --source-only com.bxc.arthasdemo.controller.FanbianyiController


现在就只有源码信息了,不过这还是在控制台,我们需要写到一个java文件中进行修改:

jad --source-only com.bxc.arthasdemo.controller.FanbianyiController > D:/FanbianyiController.java

执行完后就可以看到目录下已经有了FanbianyiController.java文件:

下面我们修改FanbianyiController.java文件,加上打印和计时:

下面我们就把修改后的FanbianyiController.java编译成class文件:

四、java编译为class文件:

在arthas中通过 mc 就可以将.java编译成.class文件:

mc D:/FanbianyiController.java -d D:/

上面已经打印出了文件存放的地址,可以看下:

五、将class文件加载到JVM中:

在arthas中通过 redefine 就可以将.class文件,加载到JVM中 :

注意 redefine后的原来的类不能恢复,redefine有可能失败(比如增加了新的field)。reset命令对redefine的类无效。如果想重置,需要redefine原始的字节码。redefine命令和jad/watch/trace/monitor/tt等命令会冲突。执行完redefine之后,如果再执行上面提到的命令,则会把redefine的字节码重置。

redefine D:/com/bxc/arthasdemo/controller/FanbianyiController.class

上面已经加载成功了,可以再次访问jadTest接口:

观察控制台的打印:

上面就已经成功实现了生产环境反编译动态修改程序调试应用的过程了。

喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!

阿里Java诊断工具 arthas - 生产环境反编译动态修改程序调试应用相关推荐

  1. 阿里Java诊断工具 arthas - 监测线上系统的运行信息、排查程序运行缓慢等问题

    一.arthas 上篇文章我们讲解了使用arthas在线上环境排查定位内存占用过大.cpu使用率过高等问题,本篇文章继续使用arthas监测线上系统的运行信息,以及排查程序运行缓慢等问题. 下面是上篇 ...

  2. 阿里开源的Java诊断工具——Arthas

    文章目录 1 问题背景 2 前言 3 Arthas有什么作用 4 入门小实践 5 SpringBoot应用.Arthas.Arthas Tunnel Server之间的关系 1 问题背景 线上生产环境 ...

  3. Java诊断工具-Arthas入门与实践

    Java诊断工具-Arthas入门与实践 目录 Java诊断工具-Arthas入门与实践 什么是Arthas? Arthas能做什么? 我在哪里可以下载Arthas? 快速入门 1. 下载并运行mat ...

  4. 阿里内部的那个牛逼带闪电的Java诊断工具arthas终于开源了

    在阿里巴巴内部,有很多自研工具供开发者使用,其中有一款工具,是几乎每个Java开发都使用过的工具,那就是Arthas,这是一款Java诊断工具,是一款牛逼带闪电的工具.该工具已于2018年9月份开源. ...

  5. Java 诊断工具Arthas初识、安装及试用

    目录 功能 使用方式 使用实例 参考 功能 监控jvm运行状态 定位应用热点,生成火焰图 具体jar包来源等 使用方式 win10本地方式 linux本地方式 docker镜像方式 idea插件方式 ...

  6. Java诊断工具Arthas使用说明

    Arthas简介 当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 ...

  7. Arthas(1):Java诊断工具Arthas入门教程

    文章目录 前言 第一节 Arthas 能为你做什么? 第二节 环境准备 第三节 快速入门 1. 启动math-game 2. 启动arthas 3. 查看dashboard 4. 通过 thread ...

  8. Java诊断工具Arthas详解

    Arthas Arthas 是 Alibaba 开源的 Java 诊断工具 作用 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 ...

  9. 阿里巴巴开源的 Java 诊断工具Arthas【入门篇】

    前面: 各位老铁们,好久没和大家见面了,最近一直躲在家里不敢出来门,过着像猪的生活..... 吃喝拉撒睡觉.远程在家办公一段时间也是遇到了比较棘手的问题.所以没有顾得上来和大家分享了,不过大家放心,从 ...

最新文章

  1. 创业思维 - Qunar的故事
  2. Leetcode 130. 被围绕的区域 解题思路及C++实现
  3. ABAP日期函数(求月末日,第几周,search help 只显示年月) 使用方法实例
  4. 搞科研、学术的朋友注意了,停下手头的活,再忙也要看一下这个!
  5. OpenMap教程–第1部分
  6. 我的处女作《设计模式之禅》——前言
  7. 程序员面试金典 - 面试题 01.09. 字符串轮转
  8. 全国高等学校计算机水平考试总结,参加全国计算机等级考试的经历和总结
  9. videojs重播_vue2.0 vue-video-player 直播hls 回放mp4
  10. 从H264/H265码流中获取宽、高及帧率
  11. C语言八字图标软件,ico图标编辑器(Greenfish Icon Editor)
  12. javascript之Bom简介
  13. 1004. 成绩排名 (20)
  14. 一文搞懂什么是免疫算法Immune Algorithm【详细介绍】
  15. 虚拟机安装LEDE之后如何配置连接互联网
  16. waves dsp服务器系统盘,Waves 插件个人经验谈(下)
  17. imx8qm xen 虚拟网卡
  18. 使用chrome浏览器插件抢小米8
  19. c语言结构体简单试题,C语言6结构体练习题6
  20. 8086的储存器编址

热门文章

  1. 定制服务器的流程是什么样的?
  2. state_dict详解
  3. word 怎么把左边目录显示出来
  4. OutputCache概念学习
  5. 可以删除电脑文件的c语言程序,电脑c盘哪些文件可以删除,详细教您c盘里哪些文件可以删除...
  6. 计算机教师格言座右铭,适合教师的格言座右铭精选50句
  7. Python编程 数值类型 数学计算
  8. main memory
  9. 从代码恐惧到开发大牛:开发者“10倍提升”宝典
  10. http代理服务器列表904