arthas使用指北 编辑

备忘录

一. arthas的使用

常用命令

  1. jad

    • 反编译class类、方法

    • 语法

      复制jad -c 类加载器 类的全路径 方法名
      
  2. thread

    • 操作线程

    • 语法

      复制
      `列举全部的线程`
      thread
      `按照CPU使用率列举前5个线程`
      thread -n 5
      `根据id查看此线程处于的运行状态,在执行的具体某个方法,方法中的代码行号`
      thread id
      `根据关键字查找线程`
      thread|grep 关键字
  3. ognl

    • 灵活的表达式

    • 语法

      复制
      `输出内部类里面的静态变量`
      `-x 2 表示对象二级展开`
      ognl "@类名$内部类名@静态变量名" -x 2
      `执行类中的静态方法,传递参数`
      ognl "@类名@静态方法(参数)"
      `查看集合(list/map)中的元素, index指list下标, 'key'指map中的key`
      ognl "@类名@静态变量[index]"
      ognl "@类名@静态变量['key']"
      `使用变量接收list、map、对象、方法的返回值。并输出`
      ognl "#value1={10,5,8},#value1"
      ognl "#value2=#{'key1':10, 'key2': 5},#value2"
      ognl "#value3 = new java.util.Random(10),#value3"
      ognl "#value4 = new java.util.Random().nextInt(100),#value4"
      `#this 永远表示当前的对象`
      ognl "{1,2}.size().(#this > 1 ? #this : 0)" `输出2,#this表示list的size`
  4. sc、sm

    • 查看JVM已经加载的类和方法

    • 语法

      复制
      `-d 表示输出详细`
      sc 类的全路径名 -d
      sm 类的全路径名 方法名 -d
  5. dump

    • 保存已加载字节码文件到本地

    • 语法

      复制
      `把demo包下所有的类的字节码文件保存到~/logs/arthas/classdump/目录下`
      dump demo.*
  6. mc、redefine

    • mc 编译java代码为.class文件

    • redefine 加载外部.class文件

    • 语法

      复制
      `编译MathGame文件`
      mc /root/MathGame.java -d /root
      `把编译后的MathGame文件加载到JVM`
      redefine /root/MathGame.class
  7. monitor

    • 用来监视一个时间段中指定方法的执行次数,成功次数,失败次数,耗时等这些信息

    • 语法

      复制
      `监视monitor方法,5s更新一次`
      monitor 类的全路径名 方法名 -c 5
      监控项 说明
      timestamp 时间戳
      class Java类
      method 方法(构造方法、普通方法)
      total 调用次数
      success 成功次数
      fail 失败次数
      rt 平均耗时
      fail-rate 失败率
  8. watch

    • 观察指定方法的调用情况

    • 语法

      参数名称 参数说明
      class-pattern 类名表达式匹配
      method-pattern 方法名表达式匹配
      express 观察表达式
      condition-express 条件表达式
      [b] 方法调用之前观察before
      [e] 方法异常之后观察 exception
      [s] 方法返回之后观察 success
      [f] 方法结束之后(正常返回和异常返回)观察 finish
      [E] 开启正则表达式匹配,默认为通配符匹配
      [x:] 指定输出结果的属性遍历深度,默认为 1
      复制
      `params表示入参,target表示类中的属性,retuernObj表示出参, 为固定格式,命名也是固定的。可选`
      `-x 2 表示展开2层`
      watch 类的全路径名 方法名 "{params,target,returnObj}" -x 2 -b -s
  9. trace

    • 对方法内部调用路径进行追踪,并输出方法路径上的每个节点上耗时。

    • 语法

      复制
      `追踪5次结束`
      `#cost > .5 表示时间大于0.5ms的记录, ognl表达式`
      `-E 开启正则匹配,默认是通配符匹配(不适用-E也可以使用 * 去匹配)`
      trace -E 类的全路径名1|类的全路径名2 方法名A|方法名B -n 5 '#cost > .5'
      `简易版`
      trace 类的全路径名 方法名
  10. stack

    • 输出当前方法被调用的调用路径

    • 语法

      复制
      `stack 类的全路径名 方法名 ognl表达式 -n 表示获取的次数, 支持-E使用正则匹配类名方法名`
      stack -E 类的全路径名1|类的全路径名2 方法名A|方法名B 'params[0]<0' -n 2
      `简易版`
      stack 类的全路径名 方法名


作者:c21cw
出处:https://www.cnblogs.com/c21w/

如果,您希望更容易地发现我的新文章,不妨点击一下绿色通道的关注我

如果您觉得阅读本文对您有帮助,请点击一下右下方的推荐按钮,您的推荐将是我写作的最大动力!
版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。如您有任何疑问或者授权方面的协商,请            .
posted @   一只小白的进修路  阅读(365)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示