Arthas常用命令

如果我们用idea作为开发工具那么可以安装以下插件

安装完以上插件后,我们不再需要自己去敲arthas命令,在idea选择方法右击 arthas Command->选相关命令,如 watch、trace

watch命令

watch com.xxl.job.test serviceA '{params,returnObj,throwExp}' -n 5 -x 3 | grep "job"

params: 入参详细信息

returnObj: 返回的详细信息

throwExp: 方法有异常时,会返回详细异常信息

-n 5: 最多输出5次调用

-x 3: 是指定输出结果的属性遍历深度,默认为 1, 这里当有返回list,并要看list里面结果的时候就需要调大此值

grep "job" 一般情况不需要带此参数,当返回的结果很大,但又想找精准信息时,可以通过grep

当然还有很多其他参数比喻-b -s等等

用途: 比喻A服务调用B服务的某个接口,A服务的业务流程依赖B服务返回的结果继续执行,当出现bug时,我们可以watch B服务的接口来查看返回的信息是否满足接下来的业务逻辑,也可以查看到B服务接口是否出现异常,这是我平时用到最多的场景。项目中不会到处打印日志,可以接触watch命令来输出入参出参信息来排查问题。

更多用法可以参考:https://arthas.aliyun.com/doc/watch.html

Trace命令

trace com.xxl.job.test serviceA

用途:

  1. 当一个方法的代码过长并有很多分支条件时,我们要知道方法执行的逻辑具体走到了哪个分支,这时候可以用trace命令来查看具体执行了哪些代码

  1. 性能测试过程中,经常会碰到接口请求耗时长,但是又不知道具体是哪个环节哪段代码耗时长,trace命名可以看到每一行代码的耗时

如果要查大于100ms的结果,可以加上'#cost>100' 参数

更多用法可以参考:https://arthas.aliyun.com/doc/trace.html

Jad命令

jad com.xxl.job.test classA

用途:经常会出现本地的代码与线上代码不一致情况,会怀疑是否打包失败,还是漏提交代码,这时候可以在生产执行jad命令反编译class来查看代码是否和预期一致, 而不需要下载整个jar来进行反编译。

更多用法可以参考:https://arthas.aliyun.com/doc/jad.html

Thread命令

thread -all

显示所有匹配线程信息,有时需要获取全部JVM的线程数据进行分析。

thread id, 显示指定线程的运行堆栈

[arthas@26605]$ thread 12"sentinel-command-center-executor-thread-1"Id=12RUNNABLE(in native)
    at java.net.PlainSocketImpl.socketAccept(NativeMethod)
    at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)
    at java.net.ServerSocket.implAccept(ServerSocket.java:560)
    at java.net.ServerSocket.accept(ServerSocket.java:528)
    at com.alibaba.csp.sentinel.transport.command.SimpleHttpCommandCenter$ServerThread.run(SimpleHttpCommandCenter.java:188)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

thread -b, 找出当前阻塞其他线程的线程

找到阻塞其他线程的线程,即当前占用锁的线程

注意, 目前只支持找出synchronized关键字阻塞住的线程, 如果是java.util.concurrent.Lock, 目前还不支持。

thread -i, 指定采样时间间隔

thread -i 1000 : 统计最近1000ms内的线程CPU时间。

thread -n 3 -i 1000 : 列出1000ms内最忙的3个线程栈

thread –state ,查看指定状态的线程

monitor命令:监控方法的执行情况

包括:成功次数、失败次数、平均响应时间、失败率

monitor -c 10 com.xxxx.xxxxController update

- 监控update这个方法的执行情况

- -c 10 指定统计周期为10秒统计一次,默认是120秒统计一次

结论:

以上就是平时实际工作中经常用到的一些命令,更多可以参考:https://arthas.aliyun.com/doc/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code.song

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值