启动
使用以下命令启动,在提示下输入要诊断的目标服务。
1
| java -jar arthas-boot.jar
|

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

thread
查看各状态的线程
1
| thread --state <threadState>
|
- Example

查看CPU
占用最高的n个线程及其stack
信息
- Example

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

trace
以下主要展示调用链。
跟踪方法的调用链
- 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: 表示一个统计周期的秒值。
dump
- Example
1
| heapdump /tmp/dump.hprof
|
创建dump文件,可以使用VisualVM
对运行时内存做进一步分析。