【arthas】 arthas命令记录

 

 

一.下载安装arthas

wget https://alibaba.github.io/arthas/arthas-boot.jar

 

二.启动,退出,停止

1.启动方法

java -jar arthas-boot.jar

 

2.退出当前指定的某一个arthas的命令

Q 或者 Ctrl+C

 

 

3.退出arthas[只能退出当前会话,arthas server并未停止执行]

exit 或者 quit

 

退出后可以通过 java -jar arthas-boot.jar 重连 arthas server服务

 

 

4.完全退出arthas server

使用 stop

 

5.仪表盘

dashboard
堆内存信息

heap 堆内存
ps_eden_space : 对象被创建的时候首先存放的区域
ps_survivor_space : eden space内存区域中经过垃圾回收后没有被回收的对象
ps_old_gen: 存放新生代中经过多次垃圾回收仍然存活的对象(上面两个都是新生代)
nonheap: 非堆内存(通常说的栈内存)
code_cash: 存放JIT所编译的机器码
metaspace: 永久代

 

 


三.trace使用,查看方法内一级子方法调用耗时【往下的调用链路】

 

1.基础使用示例:【也可以看出来整个调用栈中哪行抛出异常了throws Exception】

trace 类路径 方法名
trace com.test.ClassA methodB

 

 

2.如果本方法调用次数很多,则只想捕获10次 的调用 就退出Q

trace 类路径 方法名 run -n 10

 

 

3.tracem默认不展示JDK方法调用耗时,如果想打印出来,需要显式设置 --skipJDKMethod false

trace --skipJDKMethod false 类路径 方法名

 


4.匹配多个类或多个函数

trace -E com.test.ClassA|org.test.ClassB method1|method2|method3

 


5.排查时间大于2ms的调用

trace com.test.ClassA methodB '#cost > 2'

 

6.监听该方法 入参的invokeSysName属性 传入是"price-test"字符串时候的  1000次调用 

 

trace com.test.ClassA  methodB  -n 1000   'params[0].getInvokeSysName().equals("price-test")'

 

 

 7.监听该方法 入参的invokeSysName属性 传入是"Press-Test"字符串时候的 AND 响应时间>50ms的     1000次调用

 

trace com.test.ClassA  methodB  -n 1000    'params[0].getInvokeSysName().equals("Press-Test") && #cost > 50 '

 

 

 

 

 


四.stack使用,查看方法被调用的 调用链 【往上的调用链路】

1.基本使用示例:

stack com.test.ClassA methodB

 

 

 

 

五. 反编译


1. 查看具体 某个线程的 调用堆栈

thread PID

 


2.查看源码

查看某个类的源码

jad com.test.ClassA

 

查看某个类某个方法的源码

jad com.test.ClassA 方法A

 

 

3.只查看源码

jad --source-only com.test.ClassA

 


4.

 

 

 

六.查看具体函数

1.基础使用示例:

sm com.test.ClassA

sm com.test.ClassA methodA

 

 

2.查看某个函数的详细信息 加上属性 -d

sm -d com.test.ClassA methodA

 

 

 

七.查看JVM已经加载的类信息

1.具体某个类的JVM加载信息 【如果它是接口,还会把实现类打印出来】

sc -d com.test.ClassA

 


2.正则匹配JVM加载类的信息

sc -d com.test.Class*

或者

sc -d com.test.*B

 

 


八.动态实时监控接口

1.动态实时监控接口出入参和异常信息 层级是3层,捞取5次请求

watch com.test.ClassA methodA '{params,returnObj,throwExp}' -v -n 5 -x 3 '1==1'

 

 

2.同上,但是指定入参的第二个参数等于true的

watch com.test.ClassA methodA '{params,returnObj,throwExp}' 'params[1] == true' -v -n 5 -x 3 '1==1'

 

 

3.查看的stuId值(独立展示想要看的具体的值)

 

现在请求入参是个StuQuery

class StuQuery{
    private Integer stuId;
}

watch com.test.ClassA methodA '{params,returnObj,throwExp,params[0].{#this.stuId}[0]}' -v -n 5 -x 3 '1==1'

 

 

 

 

4.仅查看 入参的stuId == 2109241013000001L(Long需要转型)(仅watch 指定想要看的请求 修改表达式)

 

watch com.test.ClassA methodA '{params,returnObj,throwExp}' -v -n 5 -x 3 'params[0].{#this.stuId}[0].equals(2109241013000001L)'

 

 

 

 

5.当watch 设置-x层级依旧看不到对象中对象的属性时,可以自己指定返回查看的属性,例如指定查看返回对象的joinItems属性的集合中的第一个对象的zoneItems属性

 

watch com.test.ClassA methodA '{params,returnObj,throwExp,returnObj.joinItems[0].zoneItems}' -v -n 5 -x 3 '1==1'

 

 

 

 

6.查找上游请求从哪里请求进来的

 

watch -x 2 com.test.ClassA methodA '#appCode=@org.apache.dubbo.rpc.utils.UpStreamUtil@getRemoteAppCode(),
#r_code=@org.apache.dubbo.rpc.utils.UpStreamUtil@getRemoteProCode(),#traceId=@com.dmall.monitor.sdk.Monitor@getTraceId(),{#appCode,#r_code,#traceId,params}' 'params[0].venderId==1'

 

 

 

 

7.实时查看运行到当前方法所在类的对象 中的具体某个属性值

 

例如查看仅当params的field222=1000 时候的 当前对象的field111属性值是多少
watch com.test.ClassA methodA '{params,target.field111 }' "params[0].field222=1000"  -n 5  -x 5

 

 

 

 

8.

 

 

 

九.查看类的静态成员变量

1.查看类的静态成员变量 层级是3层

getstatic com.test.ClassA staticA -x 3

 

 

十.查看某个Spring管理的Bean的属性值

1.监听到拦截器请求的一个下标,得到一个数字

tt -t -n 1 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod

 

2.使用得到的下标进行替换,从上下文中获取到该Bean,就可以执行该Bean的方法了

用得到的数字替换1002,taskExecutor就是bean的name, getBean("taskExecutor")之后就可以.该Bean提供的方法,或者直接查看该Bean的属性值

taskExecutor 是举例的一个Bean的name,可以是xxx,也可以是你自己的Bean的name

 

 

tt -i 1002 -w 'target.getApplicationContext().getBean("taskExecutor").getThreadPoolExecutor().getQueue().size()'

 

3.或者直接查看该Bean的属性值,查看3层

tt -i 1002 -w 'target.getApplicationContext().getBean("taskExecutor")' -x 3

 

 

 

 

十一.

 

posted @ 2021-08-30 16:34  Angel挤一挤  阅读(1241)  评论(0编辑  收藏  举报