版本:3.0.5
我的路径:在项目同级目录下
启动:
进入目录
运行 ./as.sh
选择所需要监控的进程,如图:输入1-9后回车
1、面板查看:dashboard
详细说明:https://alibaba.github.io/arthas/dashboard.html
2、查看当前线程信息,查看线程的堆栈:thread
thread pid 显示指定线程的运行堆栈
thread -n pid 指定最忙的前N个线程并打印堆栈
thread -b 找出当前阻塞其他线程的线程
thread -i 指定采样时间间隔 (如:thread -n 3 -i 1000,每秒统计最忙的前三个线层)
3、查看当前JVM信息:jvm
THREAD相关:DEADLOCK-COUNT: JVM当前死锁的线程数
4、查看JVM已加载的类信息:sc (好奇怪,跟预期不符合)
5、方法执行数据观测:watch
详细说明:https://alibaba.github.io/arthas/watch.html
使用案例:
PS:watch 命令定义了4个观察事件点,即 -b 方法调用前,-e 方法异常后,-s 方法返回后,-f 方法结束后
<1> 查看EXXXAction 类的doSearch 方法的返回值
watch com.XXXAction doSeaXXXrch returnObj
<2>查看EXXXAction 类的doSearch 方法的出参和返回值(-x表示参数结构的嵌套深度,测试的时候发现太深也是看不了,例如返回的page里的data)
watch com.XXXAction doSearch "{params,returnObj}" -x 2
6、方法执行监控:monitor(与watch不同,watch注重参数,而monitor注重成功失败及耗时)
详细说明:https://alibaba.github.io/arthas/monitor.html
使用案例:
<1>每5秒检测该类的方法
monitor -c 5 com.XXXAction doSearch
7、方法内部调用路径,并输出方法路径上的每个节点上耗时:trace
详细说明:https://alibaba.github.io/arthas/trace.html
使用案例:
<1>trace com.XXXAction doSearch
<2>trace com.XXXServiceImpl query
像这样一层一层追踪耗时在哪里
8、输出当前方法被调用的调用路径(当前方法是从哪里被调用):stack
详细说明:https://alibaba.github.io/arthas/stack.html
使用案例:
<1>stack com.XXXServiceImpl query
9、反编译指定已加载类的源码:jad
jad java.lang.String
jad --source-only demo.MathGame
10、清空当前屏幕区域:cls
11、退出arthas:quit或者exit
如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。
如果想完全退出arthas,可以执行shutdown命令。