首页 > 其他分享 >如何使用Arthas定位问题

如何使用Arthas定位问题

时间:2022-08-30 17:45:54浏览次数:65  
标签:redefine mc 定位问题 watch Hello 如何 Arthas jad class

在我们日常的工作中,经常会遇到一些线上才会遇到的问题。Arthas无疑是我们在工作中,定位线上问题的神奇。下面,我将介绍一下我们在工作中经常用到的一些功能。

dashboard

image
首先我们可以通过dashboard查看线程整体的运行情况,heap的消耗情况,以及运行时环境

thread

thread:查看所有线程的状态
image

threa id:查看具体某一个线程的具体信息
image

sc & sm

sc: search class
sm: search method
sc:
image
sm:
image

jad & mc & redefine

jad:JVM 中实际运行的 class 的 byte code 反编译成 java 代码
mc: Memory Compiler/内存编译器,编译.java文件生成.class
redefine: 加载外部的.class文件,redefine jvm 已加载的类。

redefine 的 class 不能修改、添加、删除类的 field 和 method,包括方法参数、方法名称及返回值
如果 mc 失败,可以在本地开发环境编译好 class 文件,上传到目标系统,使用 redefine 热加载 class
目前 redefine 和 watch/trace/jad/tt 等命令冲突,以后重新实现 redefine 功能会解决此问题

reset命令对redefine的类无效。如果想重置,需要redefine原始的字节码。

redefine命令和jad/watch/trace/monitor/tt等命令会冲突。执行完redefine之后,如果再执行上面提到的命令,则会把redefine的字节码重置。 原因是 jdk 本身 redefine 和 Retransform 是不同的机制,同时使用两种机制来更新字节码,只有最后修改的会生效。

这个三个指令一起用,可以达到热部署的效果
比如现在我们希望这个函数返回值,由Hello变成Hello World

    @GetMapping("/hello")
    public String hello(){
        return "Hello";
    }

jad:
image
image

mc:
image

redefine:
image

这时候访问的返回结果就是Hello World
image

monitor

monitor:方法的执行监控
image

trace

trace: 查看方法中方法的耗时
image

watch

watch:观测函数的调用情况
// TODO

标签:redefine,mc,定位问题,watch,Hello,如何,Arthas,jad,class
From: https://www.cnblogs.com/hardyzhou/p/16640226.html

相关文章