一、jvm 相关命令介绍
| 命令 | 说明 | 
|---|---|
| dashboard | 当前系统的实时数据面板 | 
| getstatic | 查看类的静态属性 | 
| heapdump | dump java heap, 类似 jmap 命令的 heap dump 功能 | 
| jvm | 查看当前 JVM 的信息 | 
| logger | 查看和修改 logger | 
| mbean | 查看 Mbean 的信息 | 
| memory | 查看 JVM 的内存信息 | 
| ognl | 执行 ognl 表达式 | 
| perfcounter | 查看当前 JVM 的 Perf Counter 信息 | 
| sysenv | 查看 JVM 的环境变量 | 
| sysprop | 查看和修改 JVM 的系统属性 | 
| thread | 查看当前 JVM 的线程堆栈信息 | 
| vmoption | 查看和修改 JVM 里诊断相关的 option | 
| vmtool | 从 jvm 里查询对象,执行 forceGC | 
二、jvm 命令
2.1、dashboard
dashboard命令用来查看当前系统的实时数据面板
参数:
| 参数名称 | 参数说明 | 
|---|---|
| [i:] | 刷新实时数据的时间间隔 (ms),默认 5000ms | 
| [n:] | 刷新实时数据的次数 | 
使用说明:
dashboard 

间隔 10s 刷新一次 大盘信息
    dashboard -i 10000 
数据说明:
| ID | Java 级别的线程 ID(不能跟 jstack 中的 nativeID 一 一对应)。 | 
| NAME | 线程名 | 
| GROUP | 线程组名 | 
| PRIORITY | 线程优先级, 1~10 之间的数字,越大表示优先级越高 | 
| STATE | 线程的状态 | 
| CPU% | 线程的 cpu 使用率。比如采样间隔 1000ms,某个线程的增量 cpu 时间为 100ms,则 cpu 使用率=100/1000=10% | 
| DELTA_TIME | 上次采样之后线程运行增量 CPU 时间,数据格式为秒 | 
| TIME | 线程运行总 CPU 时间,数据格式为分:秒 | 
| INTERRUPTED | 线程当前的中断位状态 | 
| DAEMON | 是否是 daemon 线程 | 
JVM 内部线程
Java 8 之后支持获取 JVM 内部线程 CPU 时间,这些线程只有名称和 CPU 时间,没有 ID 及状态等信息(显示 ID 为-1)。 通过内部线程可以观测到 JVM 活动,如 GC、JIT 编译等占用 CPU 情况,方便了解 JVM 整体运行状况。
-  
当 JVM 堆(heap)/元数据(metaspace)空间不足或 OOM 时,可以看到 GC 线程的 CPU 占用率明显高于其他的线程。
 - 当执行trace/watch/tt/redefine等命令后,可以看到 JIT 线程活动变得更频繁。因为 JVM 热更新 class 字节码时清除了此 class 相关的 JIT 编译结果,需要重新编译。
 
JVM 内部线程包括下面几种:
-  
JIT 编译线程: 如 C1 CompilerThread0, C2 CompilerThread0
 -  
GC 线程: 如GC Thread0, G1 Young RemSet Sampling
 -  
其它内部线程: 如VM Periodic Task Thread, VM Thread, Service Thread
 

2.2、thread
查看当前线程信息,查看线程的堆栈
参数:
| 参数名称 | 参数说明 | 
|---|---|
| id | 线程 id | 
| [n:] | 指定最忙的前 N 个线程并打印堆栈 | 
| [b] | 找出当前阻塞其他线程的线程 | 
[i <value>] | 指定 cpu 使用率统计的采样间隔,单位为毫秒,默认值为 200 | 
| [--all] | 显示所有匹配的线程 | 
使用说明:
显示当前线程
    thread 

展示当前最忙的前 N 个线程并打印堆栈
    thread -n 3 
        显示所有匹配的线程(和 thread 命令一样)
    thread --all 
thread id, 显示指定线程的运行堆栈(main 线程的线程id为1)
    thread 1 
thread -i:指定采样时间间隔
- thread -i 1000:统计最近 1000ms 内的线程 CPU 时间。
 - thread -n 3 -i 1000:列出 1000ms 内最忙的 3 个线程栈
 
        
thread --state:查看指定状态的线程,查看运行时状态的线程
    thread --state RUNNABLE 
 
 
查看当前阻塞其他线程的线程(运行死锁的案例可以查看死锁的线程)
    thread -b 
2.3、jvm
查看当前 JVM 的信息
使用说明:
查看 JVM 信息
    jvm 
  


数据说明:
THREAD 相关:
| COUNT | JVM 当前活跃的线程数 | 
| DAEMON-COUNT | JVM 当前活跃的守护线程数 | 
| PEAK-COUNT | 从 JVM 启动开始曾经活着的最大线程数 | 
| STARTED-COUNT | 从 JVM 启动开始总共启动过的线程次数 | 
| DEADLOCK-COUNT | JVM 当前死锁的线程数 | 
文件描述符相关:
| MAX-FILE-DESCRIPTOR-COUNT | JVM 进程最大可以打开的文件描述符数 | 
| OPEN-FILE-DESCRIPTOR-COUNT | JVM 当前打开的文件描述符数 | 
2.4、memory
查看 JVM 内存信息。
使用说明:
    memory 
数据说明:
| heap | 堆大小 | 
| ps_eden_space | Eden 区大小 | 
| ps_survivor_space | Survivor 区大小 | 
| ps_old_gen | 老年代大小 | 
| nonheap | 非堆大小 | 
| code_cache | 代码缓存 | 
| metaspace | 元空间大小 | 
| compressed_class_space | 压缩类空间 | 
| direct | 直接内存 | 
| mapped | 内存映射 | 
2.5、vmoption
查看,更新 VM 诊断相关的参数
使用说明:
查看所有的 option
    vmoption 

说明:
ORIGIN:DEFAULT 表示是默认值,MANAGEMENT 表示修改过的值。
WRITEABLE:true 表示可以修改,false表示不可以修改。
查看指定的 option,查看起始堆大小和最大堆大小
    vmoption InitialHeapSize
    vmoption MaxHeapSize
 

更新指定的 option( WRITEABLE 为 true 的可以修改)
    vmoption PrintGC
    vmoption PrintGC true 

2.6、vmtool
2.7、heapdump
2.8、getstatic(不推荐,推荐 ongl)
通过 getstatic 命令可以方便的查看类的静态属性。使用方法为getstatic class_name field_name。
查看 arthas 官方的 demo 中的 MatchGame。

2.9、ongl
2.10、sysprop(不常用)
查看当前 JVM 的系统属性
使用说明:
查看当前 JVM 的系统属性
    sysprop 
查看单个属性
    sysprop java.version 

修改单个属性
[arthas@5232]$ sysprop user.country
 KEY                    VALUE
-----------------------------------------------------------------------------------------
 user.country           CN
[arthas@5232]$ sysprop user.country US
Successfully changed the system property.
 KEY                    VALUE
-------------------------------------------------------------------------------------------
 user.country           US 
通过tab自动提示和补全

2.11、sysenv(不常用)
查看当前 JVM 的环境属性。
使用说明:
    sysenv
                




















