Arthas线上排查问题流程

入门文档:trace | arthas

1、jar下载和启动
连接curl -O https://arthas.aliyun.com/arthas-boot.jar【wget https://arthas.aliyun.com/arthas-boot.jar】
。.../jdk/bin/java -jar arthas-boot.jar  22336【最好在这个目录启动,port可选】
选择进程序号 enter回车:
可能 报错The telnet port 3658 is used by process 22336 instead of target process 20736, you will connect to an unexpected process 说明上次的连接还在挂着,没有exit或者stop,需要先进入,再stop;  

最后重启arthas-boot.jar 选择程序
演示:


 2、trace 查找时间运行过长 或者某个方法运行的情况

基本用法:
trace class-pattern method-pattern [condition-express]

参数说明:
class-pattern: 类名表达式匹配
method-pattern: 方法名表达式匹配
condition-express: 条件表达式,ognl语法
-E:  正则匹配
-n:  执行次数,例如 -n 2

例子:
1.trace函数指定类的方法
trace MathGame run
2.默认情况下,trace不会包含jdk里的函数调用,如果希望trace jdk里的函数,需要显式设置--skipJDKMethod false.
trace --skipJDKMethod false MathGame run
3.根据耗时过滤,trace大于100ms的调用路径
trace MathGame run '#cost > 100'
4.可以所使用的正则匹配路径上的多个类和函数,一定程度上达到多层trace的效果。
trace -E com.test.ClassA|org.test.ClassB method1|method2|method3

演示: 

3、watch语法排查

基本语法,[]表示可选:
watch class-pattern method-pattern express [condition-express]

参数说明:
class-pattern: 类名表达式匹配
method-pattern: 方法名表达式匹配
express: 观察表达式,ognl语法
condition-express: 条件表达式,ognl语法
-b: 在方法调用前观察,before
-e: 在方法异常后观察,exception
-s: 在方法返回之后观察, success
-f:  在方法结束之后观察(正常返回和异常返回),finish
-n: watch xxx... -n 2,表示只执行两次
-E: 开启正则匹配
-x: 结果属性遍历深度,默认为-x 1。例如,一个对象里的属性为List<Integer>,当深度为1时,我们只能看到对象里有一个List的属性,看不到List里保存的具体的值,当深度为2时就可以看到了

特别说明:
1.-b,-e,-s默认关闭,-f默认打开,当指定观察点被打开后,在相应事件点会对观察表达式进行求值并输出
2.这里要注意方法入参和方法出参的区别,有可能在中间被修改导致前后不一致,除了-b事件点params代表方法入参外,其余事件都代表方法出参
3.当使用-b时,由于观察事件点是在方法调用前,此时返回值或异常均不存在

例子:
1.观察MathGame类中primeFactors方法的返回值,遍历深度为2
watch MathGame primeFactors "{params, returnObj}" -x 2
2.观察MathGame类中primeFactors方法的入参,深度为2
watch MathGame primeFactors "{params, returnObj}" -x 2 -b
3. 观察当前对象中的所有属性,在函数执行前
watch MathGame primeFactors "target" -x 2 -b
4.观察对象中某一个属性,在函数执行前,target指当前对象
watch MathGame primeFactors "target.属性名" -x 2 -b
5.同时观察方法调用前和方法返回后,参数里-n 2,表示只执行两次
watch MathGame primeFactors "{params, target, returnObj}" -x 2 -b -s -n 2
6.通过条件表达式,输出第一参数小于0的情况
watch MathGame primeFactors "{params[0], target}" "params[0]<0"

 演示:

4、stack

很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法时从哪里被执行了,此时需要的是stack命令

基本用法:
stack class-pattern method-pattern [condition-express]

参数说明:
class-pattern: 类名表达式匹配
method-pattern: 方法名表达式匹配
condition-express: 条件表达式,ognl语法
-E:  正则匹配
-n:  执行次数,例如 -n 2

例子:
1.查看MathGame类,primeFactors方法被执行的路径
stack MathGame primeFactors
2.条件表达式来过滤,第0个参数的值小于0
stack MathGame primeFactors 'params[0]<0' 
3.根据执行时间进行过滤,赛选出执行时间超过100ms的
stack MathGame primeFactors '#cost > 100'

演示:

5 dashboard--cpu过高分析

成功解决怎么使用Arthas定位CPU突然飙高的问题_arthas排查cpu占用过高-CSDN博客 

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值