首页 > 其他分享 >arthas使用指北

arthas使用指北

时间:2023-11-16 11:46:06浏览次数:34  
标签:指北 arthas 语法 路径名 使用 ognl 方法 class 类名

备忘录

一. 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 类的全路径名 方法名
      

标签:指北,arthas,语法,路径名,使用,ognl,方法,class,类名
From: https://www.cnblogs.com/c21w/p/17835884.html

相关文章

  • 避免defer陷阱:拆解延迟语句,掌握正确使用方法
    基本概念Go语言的延迟语句defer有哪些特点?通常在什么情况下使用?Go语言的延迟语句(deferstatement)具有以下特点:延迟执行:延迟语句会在包含它的函数执行结束前执行,无论函数是正常返回还是发生异常。后进先出:如果有多个延迟语句,它们会按照后进先出(LIFO)的顺序执行。也就是说,......
  • 在 let 的块作用域中无法重复声明,也无法在声明语句之前使用(没有变量提升)。简而言之,在
    以下代码执行时不会在控制台输出错误信息的是:Aleta=decodeURIComponent('%');Bvara;a();functiona(){console.log(a);}CPromise.reject(123).finally(a=>{console.log(a);});Dvara=1;leta=2;console.log(a);正确答案:B●首先,js有变量提升和函数......
  • Java 多线程安全的使用小结
    在使用多线程进行编程的过程中,难免遇到共享资源读写问题,这是为了线程安全,一种思路就是使用锁来控制并发读写问题。在通过锁来实现并发安全中,常用的有以下几种:synchronized,对象锁ReentrantLock,重入锁ReentrantReadWriteLock,读写锁今天从使用的角度来看看这几种锁是如何使......
  • Java 线程池使用小结
    我们在使用多线程编程的时候,为何要用线程池呢?使用线程池的好处是什么呢?线程池有哪些使用场景?为何使用线程池?因为线程资源宝贵,不论创建新的线程还是销毁线程,都有相应的资源开销,比如在数据库连接方面,每个请求过来都是新建连接数据库的线程,请求少,资源开销总体不大,但也架不住请求一......
  • Cocos Creator中骨骼动画组件的使用
    在CocosCreator游戏开发中,骨骼动画对于优化系统资源占用有很大帮助,很多时候我们都会使用。对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀~spine骨骼动画工具1:骨骼动画:把动画打散,通过工具,调骨骼的运动等来形成动画2:spine是一个非常流......
  • 如何优雅使用 vuex
    大纲本文内容更多的是讲讲使用vuex的一些心得想法,所以大概会讲述下面这些点:Q1:我为什么会想使用vuex来管理数据状态交互?Q2:使用vuex框架有哪些缺点或者说副作用?Q3:我是如何在项目里使用vuex的?初识vuex对于vuex,有人喜欢,有人反感喜欢的人觉得它可以很好的解决复杂的数......
  • void 作为运算符后面接的是表达式,void expression。而void(0)也是被当做void 0。如果
    void();上面表达式的结果是:AundefinedBTypeErrorCnullDSyntaxError正确答案:Dtypeof1;//'number'typeof(1);//'number'typeof();//SyntaxError语法错误void0;//undefinedvoid(0);//undefinedvoid();//SyntaxError语法错误也就是说错的不是void,而是......
  • 在forEach中使用 return false 或者 break无法跳出整个循环,并且使用break会直接报错
    执行以下程序,输出结果为()vararr=[2,1,3,5,9];varcount=0;arr.forEach((val1,val2)=>{count++;if(count%3==0){return;}console.log(val1);})A21B01C0134D2159正确答案:Darr.forEach()是......
  • 使用exe4j软件将打包好的jar包转成exe文件
    链接在此相关教程跳转我的实践(请忽略项目名称)......
  • 使用new实例化对象时,this指向新创建的对象
    下面关于this工作原理的描述,哪一个是错误的?A在全局范围内,this指向全局对象(浏览器下指window)B对象函数调用时,this指向当前对象C全局函数调用时,this指向全局函数D使用new实例化对象时,this指向新创建的对象正确答案:C全局函数调用时,this指向全局函数;应该是指向调用全局......