jvm相关
- dashboard——当前系统的实时数据面板
- thread——查看当前 JVM 的线程堆栈信息
- jvm——查看当前 JVM 的信息
- sysprop——查看和修改JVM的系统属性
- sysenv——查看JVM的环境变量
- vmoption——查看和修改JVM里诊断相关的option
- perfcounter——查看当前 JVM 的Perf Counter信息
- logger——查看和修改logger
- getstatic——查看类的静态属性
- ognl——执行ognl表达式
- mbean——查看 Mbean 的信息
- heapdump——dump java heap, 类似jmap命令的heap dump功能
- vmtool——从jvm里查询对象,执行forceGc | | | | | —- | —- | —- | | vmoption | 查看,更新VM诊断相关的参数 | | | thread | 查看当前线程信息,查看线程的堆栈 | | | memory | 查看JVM 内存信息。 | | | sysprop | 查看当前JVM的系统属性(SystemProperty) | |
Thread
查看当前线程信息,查看线程的堆栈,参数说明
参数名称 | 参数说明 |
---|---|
id | 线程id |
[n:] | 指定最忙的前N个线程并打印堆栈 |
[b] | 找出当前阻塞其他线程的线程 |
[i |
指定cpu占比统计的采样间隔,单位为毫秒 |
[—all] | 显示所有匹配的线程 |
查看
thread
Threads Total: 19, NEW: 0, RUNNABLE: 7, BLOCKED: 0, WAITING: 4, TIMED_WAITING: 3, TERMINATED: 0, I
nternal threads: 5
ID NAME GROUP PRIORIT STATE %CPU DELTA_TI TIME INTERRU DAEMON
21 arthas-command-execute system 5 RUNNABL 0.48 0.000 0:0.005 false true
1 main main 5 TIMED_W 0.13 0.000 0:0.093 false false
-1 VM Periodic Task Thread - -1 - 0.08 0.000 0:0.066 false true
2 Reference Handler system 10 WAITING 0.0 0.000 0:0.001 false true
3 Finalizer system 8 WAITING 0.0 0.000 0:0.001 false true
4 Signal Dispatcher system 9 RUNNABL 0.0 0.000 0:0.000 false true
8 Attach Listener system 9 RUNNABL 0.0 0.000 0:0.024 false true
10 arthas-timer system 9 WAITING 0.0 0.000 0:0.000 false true
13 arthas-NettyHttpTelnetBo system 5 RUNNABL 0.0 0.000 0:0.028 false true
14 arthas-NettyWebsocketTty system 5 RUNNABL 0.0 0.000 0:0.001 false true
15 arthas-NettyWebsocketTty system 5 RUNNABL 0.0 0.000 0:0.001 false true
16 arthas-shell-server system 9 TIMED_W 0.0 0.000 0:0.000 false true
17 arthas-session-manager system 9 TIMED_W 0.0 0.000 0:0.000 false true
18 arthas-UserStat system 9 WAITING 0.0 0.000 0:0.000 false true
20 arthas-NettyHttpTelnetBo system 5 RUNNABL 0.0 0.000 0:0.069 false true
-1 C1 CompilerThread1 - -1 - 0.0 0.000 0:0.378 false true
-1 C2 CompilerThread0 - -1 - 0.0 0.000 0:0.479 false true
-1 VM Thread - -1 - 0.0 0.000 0:0.060 false true
-1 Service Thread - -1 - 0.0 0.000 0:0.000 false true
cpu使用率是如何统计出来的
这里的cpu使用率与linux 命令top -H -p
工作原理说明:
- 首先第一次采样,获取所有线程的CPU时间(调用的是java.lang.management.ThreadMXBean#getThreadCpuTime()及sun.management.HotspotThreadMBean.getInternalThreadCpuTimes()接口)
- 然后睡眠等待一个间隔时间(默认为200ms,可以通过-i指定间隔时间)
- 再次第二次采样,获取所有线程的CPU时间,对比两次采样数据,计算出每个线程的增量CPU时间
- 线程CPU使用率 = 线程增量CPU时间 / 采样间隔时间 * 100%
注意: 这个统计也会产生一定的开销(JDK这个接口本身开销比较大),因此会看到as的线程占用一定的百分比,为了降低统计自身的开销带来的影响,可以把采样间隔拉长一些,比如5000毫秒。
查看最忙的线程,当前最忙的前N个线程并打印堆栈:
$ thread -n 3
"arthas-command-execute" Id=21 cpuUsage=0.2% deltaTime=0ms time=17ms RUNNABLE
at sun.management.ThreadImpl.dumpThreads0(Native Method)
at sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:461)
at com.taobao.arthas.core.command.monitor200.ThreadCommand.processTopBusyThreads(ThreadCommand.java:206)
at com.taobao.arthas.core.command.monitor200.ThreadCommand.process(ThreadCommand.java:122)
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.process(AnnotatedCommandImpl.java:82)
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.access$100(AnnotatedCommandImpl.java:18)
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:111)
at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:108)
at com.taobao.arthas.core.shell.system.impl.ProcessImpl$CommandProcessTask.run(ProcessImpl.java:385)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
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)
"C1 CompilerThread1" [Internal] cpuUsage=0.11% deltaTime=0ms time=406ms
"VM Periodic Task Thread" [Internal] cpuUsage=0.09% deltaTime=0ms time=193ms
常用命令举例
命令 | |
---|---|
thread -n 3 -i 1000 | 列出1000ms内最忙的3个线程栈 |
thread —state WAITING | 查看指定状态的线程 |
JVM
THREAD相关
- COUNT: JVM当前活跃的线程数
- DAEMON-COUNT: JVM当前活跃的守护线程数
- PEAK-COUNT: 从JVM启动开始曾经活着的最大线程数
- STARTED-COUNT: 从JVM启动开始总共启动过的线程次数
-
文件描述符相关
MAX-FILE-DESCRIPTOR-COUNT:JVM进程最大可以打开的文件描述符数
- OPEN-FILE-DESCRIPTOR-COUNT:JVM当前打开的文件描述符数
dashboard
命令可以查看当前系统的实时数据面板。