捂脸斋

江山风月 🌘 本无常主 🌈 闲者便是主人 🍃🍃🍃

Arthas实战教程

启动

使用以下命令启动,在提示下输入要诊断的目标服务。

1
java -jar arthas-boot.jar

dashboard

1
dashboard

可以直观地看到服务的各种监控数据。

thread

查看各状态的线程

1
thread --state <threadState>
  • Example
查看CPU占用最高的n个线程及其stack信息
1
thread -n <count>
  • Example

    从调用栈可以看到,该服务执行了BoostUtil.boostCPU2导致CPU暴增,通过查询code发现,该方法是一个耗时的循环。

trace

以下主要展示调用链。

跟踪方法的调用链
1
track <class> <method>
  • Example

    输入命令后,terminal会一直处于挂起状态,需要手动退出。
    在行首,可以直观地看到每个方法的调用时长。在当前案例中,BoostUtil.trace()耗时6015ms。
根据调用耗时过滤
1
track <class> <method> '#cost > <ms>'
  • Example

    两次trace后,调用了同样的api,但由于第二次trace的过滤条件是『耗时大于7000ms』,所以没有输出。
trace到若干次后就退出
1
track <class> <method> -n <times>

被官方文档骗了,并没有自动退出。

watch

观测方法的入参和返回值
1
watch <class> <method> "{params,returnObj}" -x <depthOfReadResult>

depthOfReadResult: 表示读返回值的递归深度。

  • Example

monitor

方法执行监控。

监控一定周期内,方法的调用情况
1
monitor -c <cycleSeconds> ink.wulian.demo.micronaut.controller.AgentController trace

cycleSeconds: 表示一个统计周期的秒值。

  • Example



dump

  • Example
    1
    heapdump /tmp/dump.hprof
    创建dump文件,可以使用VisualVM对运行时内存做进一步分析。