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] | 显示所有匹配的线程 | 
查看
threadThreads Total: 19, NEW: 0, RUNNABLE: 7, BLOCKED: 0, WAITING: 4, TIMED_WAITING: 3, TERMINATED: 0, Internal threads: 5ID NAME GROUP PRIORIT STATE %CPU DELTA_TI TIME INTERRU DAEMON21 arthas-command-execute system 5 RUNNABL 0.48 0.000 0:0.005 false true1 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 true2 Reference Handler system 10 WAITING 0.0 0.000 0:0.001 false true3 Finalizer system 8 WAITING 0.0 0.000 0:0.001 false true4 Signal Dispatcher system 9 RUNNABL 0.0 0.000 0:0.000 false true8 Attach Listener system 9 RUNNABL 0.0 0.000 0:0.024 false true10 arthas-timer system 9 WAITING 0.0 0.000 0:0.000 false true13 arthas-NettyHttpTelnetBo system 5 RUNNABL 0.0 0.000 0:0.028 false true14 arthas-NettyWebsocketTty system 5 RUNNABL 0.0 0.000 0:0.001 false true15 arthas-NettyWebsocketTty system 5 RUNNABL 0.0 0.000 0:0.001 false true16 arthas-shell-server system 9 TIMED_W 0.0 0.000 0:0.000 false true17 arthas-session-manager system 9 TIMED_W 0.0 0.000 0:0.000 false true18 arthas-UserStat system 9 WAITING 0.0 0.000 0:0.000 false true20 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 RUNNABLEat 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
命令可以查看当前系统的实时数据面板。
