跳至主要內容

Arthas-学习笔记

xw大约 1 分钟arthasarthas

Arthas基础命令

  • dashboard

    dashboard命令可以查看当前系统的实时数据面板,输入Q或者CTRL+C退出命令

  • thread -1命令打印线程ID 1的栈

  • sc 命令来查找JVM里已加载的类,-d可以打印出类加载的具体信息,如果搜索的是接口会查找所有的实现类

  • jad 命令来反编译代码

    jad demo.MathGame
    
  • watch命令可以查看函数的参数/返回值/异常信息

    watch demo.MathGame primeFactors returnObj
    
  • vmtool命令,可以搜索内存对象

    vmtool --action getInstances --className java.lang.String --limit 10
    
  • sysprop 可以打印所有的System Properties信息

​ 指定单个key: sysprop java.version

​ 通过grep来过滤: sysprop | grep user

​ 设置新的值: sysprop testKey testValue

  • sysenv可以获取环境变量

  • jvm 命令会打印出JVM的各种详细信息

  • sm命令则是查找类的具体函数

    sm java.math.RoundingMode
    

    -d参数打印函数的具体属性

    sm -d java.math.RoundingMode
    

    也可以查找特定的函数,比如查找构造函数:

    sm java.math.RoundingMode <init>
    
  • jad反编译代码

  • 热更新代码

    1. jad反编译UserController

      jad --source-only com.example.demo.arthas.user.EsRestClientConfig > /tmp/EsRestClientConfig.java
      
    2. 更新代码 26a1ab54

    3. sc查找对应的classLoader

      sc -d *EsRestClientConfig | grep classLoaderHash
      
    4. 使用mc命令编译

      mc -c 26a1ab54 /tmp/EsRestClientConfig.java -d /tmp
      
    5. 使用redefine命令重新加载新编译好的UserController.class

      redefine /tmp/com/example/demo/arthas/user/UserController.class