前言:
上一篇文章 Arthas(阿尔萨斯) – 阿里在线诊断神器(一) 中介绍了 tt、sm、sc、jad 几个常用命令详解,今天我们继续学习其他命令。
开始学习
先来几个简单常见的命令
dashboard
当前系统的实时数据面板,可以显示 JVM 内存使用情况,java 版本信息,
thread
常见参数
-i
指定时间内采集
thread -i 2000 效果和 thread 类似,但是是一段时间数据
-n
找出 cpu 使用率最高的几个线程
例子:
thread -n 3
-b
找到持有锁的线程,有时候请求后,一直卡住,那么可以使用该方式去查找持有锁的线程。注意该方式不支持 显示锁也就是 lock 接口的。
例子:
thread -b
jvm
输出 jvm 相关信息,包括加载类的路径,启动类路径,加载类个数等等,好多,就不截图了。
trace 命令
该命令有点强,用于查看接口调用时间,可以找出接口在调用不同方法时所花费的时间,可以用作性能调优。
常用参数:
-n
有时候请求量太大,我们不需要每个请求调用时间,那么可以使用这个参数,指定次数调用后结束。
trace *TestController abc -n 2
我们也可以进行筛选,比如我们要找出请求时间大于 10ms 的线程,如下命令即可。
trace *TestController abc ‘#cost>10’
watch 命令
常用参数:
-b
在调用方法前观察这个方法,可以看到传入的参数值。
watch -b *TestController abc params
-e
观察抛出异常时传入参数
watch -e *TestController abc params
-f
方法调用完成,返回对象是观察具体数据。
watch -f *TestController abc params
假设我们想观察详细一些怎么做呢?
先看看我们抛出异常的情况,只是看异常,不看具体堆栈
watch *TestController abc ‘{params,target,throwExp}’
查看具体堆栈的在后面加 -x 2 ,意思是输出 2 层的结果,默认情况下我们只输出异常(也是就默认 -x 1),就像上图。
watch *TestController abc ‘{params,target,throwExp}’ -x 2
可以尝试多种情况,比如将所有参数,返回结果都输出
watch *TestController abc ‘{params,target,returnObj}’ -x 2
这里演示的差不多了,就不继续了,还有可以一个一个查看,可以去动手实践。
stack 命令
该命令霸道,看源码执行方式必备呀。比如:我们看到一个核心方法,但是发现这个方法会被执行的路径很多,我们很难找到到底哪个执行了,那这个命令就体现他强大之处了。
常用命令:
-n
指定结束次数,达到次数则自动退出,不继续监听。
stack *Users setName -n 1
上面那个命令,用我们一个 Users 类的 setName 方法来查看,发现就是我们 TestController 调用了。
小结:
今天的命令学习到这里,Arthas 还有更强大的功能,我们将在后续继续写下一篇。下一篇的命令,在工作中我们可能用的更多,也更实用。
如果想要深入学习,可以去官网学习喔 – https://alibaba.github.io/arthas/tt.html
有兴趣的同学可以关注公众号一起学习!