Arthas是Alibaba开源的Java诊断工具,Arthas 支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的Tab 自动补全功能,进一步方便进行问题的定位和诊断。
Arthas 3.0使用OGNL表达式求值库,详见OGNL表达式官网
常用命令
jvm
查看当前JVM信息
THREAD相关
COUNT : JVM当前活跃的线程数DAEMON-COUNT : JVM当前活跃的守护线程数PEAK-COUNT : 从JVM启动开始曾经活着的最大线程数STARTED-COUNT : 从JVM启动开始总共启动过的线程次数DEADLOCK-COUNT : JVM当前死锁的线程数
thread
查看当前线程信息,查看线程的堆栈
参数名称 | 参数说明 |
---|
id | 线程id | [n:] | 指定最忙的前N个线程并打印堆栈 | [b] | 找出当前阻塞其他线程的线程 | [i <value> ] | 指定cpu使用率统计的采样间隔,单位为毫秒,默认值为200 | [–all] | 显示所有匹配的线程 |
cpu使用率是如何统计出来的? 这里的cpu使用率与linux 命令top -H -p <pid> 的线程%CPU 类似,一段采样间隔时间内,当前JVM里各个线程的增量cpu时间与采样间隔时间的比例。
$ thread
Threads Total: 33, NEW: 0, RUNNABLE: 9, BLOCKED: 0, WAITING: 3, TIMED_WAITING: 4, TERMINATED: 0, Internal threads: 17
ID NAME GROUP PRIORITY STATE %CPU DELTA_TIME TIME INTERRUPT DAEMON
-1 C2 CompilerThread0 - -1 - 5.06 0.010 0:0.973 false true
stack
输出当前方法被调用的调用路径
参数名称 | 参数说明 |
---|
class-pattern | 类名表达式匹配 | method-pattern | 方法名表达式匹配 | condition-express | 条件表达式 | [E] | 开启正则表达式匹配,默认为通配符匹配 | [n:] | 执行次数限制 |
根据执行时间来过滤
$ stack demo.MathGame primeFactors '#cost>5' -n 2
heapdump
dump java heap, 类似jmap命令的heap dump功能。
dump到指定文件
[arthas@58205]$ heapdump /tmp/dump.hprof
Dumping heap to /tmp/dump.hprof...
Heap dump file created
参考资料:
- Arthas 用户文档
- 当DUBBO遇上Arthas - 排查问题的实践
- Arthas表达式核心变量
|