一、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

java查看JVM线程状态时 jvm查看线程状态命令_jvm

        间隔 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

java查看JVM线程状态时 jvm查看线程状态命令_jvm_02

2.2、thread

        查看当前线程信息,查看线程的堆栈

参数:

参数名称

参数说明

id

线程 id

[n:]

指定最忙的前 N 个线程并打印堆栈

[b]

找出当前阻塞其他线程的线程

[i <value>]

指定 cpu 使用率统计的采样间隔,单位为毫秒,默认值为 200

[--all]

显示所有匹配的线程

 使用说明: 

        显示当前线程 

thread

java查看JVM线程状态时 jvm查看线程状态命令_java查看JVM线程状态时_03

         展示当前最忙的前 N 个线程并打印堆栈

thread -n 3

java查看JVM线程状态时 jvm查看线程状态命令_java_04

        显示所有匹配的线程(和 thread 命令一样)

thread --all

        thread id, 显示指定线程的运行堆栈(main 线程的线程id为1)


thread 1


java查看JVM线程状态时 jvm查看线程状态命令_java_05


        thread -i:指定采样时间间隔

  •         thread -i 1000:统计最近 1000ms 内的线程 CPU 时间。
  •         thread -n 3 -i 1000:列出 1000ms 内最忙的 3 个线程栈

        

java查看JVM线程状态时 jvm查看线程状态命令_开发语言_06

        thread --state:查看指定状态的线程,查看运行时状态的线程 

thread --state RUNNABLE

 

java查看JVM线程状态时 jvm查看线程状态命令_java查看JVM线程状态时_07

 

查看当前阻塞其他线程的线程(运行死锁的案例可以查看死锁的线程)


thread -b


2.3、jvm

        查看当前 JVM 的信息

使用说明:

        查看 JVM 信息

jvm

  

java查看JVM线程状态时 jvm查看线程状态命令_jvm_08

java查看JVM线程状态时 jvm查看线程状态命令_java_09

java查看JVM线程状态时 jvm查看线程状态命令_jvm_10

数据说明:

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

java查看JVM线程状态时 jvm查看线程状态命令_java查看JVM线程状态时_11

        说明:

        ORIGIN:DEFAULT 表示是默认值,MANAGEMENT 表示修改过的值。

        WRITEABLE:true 表示可以修改,false表示不可以修改。

        查看指定的 option,查看起始堆大小和最大堆大小

vmoption InitialHeapSize

    vmoption MaxHeapSize

java查看JVM线程状态时 jvm查看线程状态命令_JVM_12

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

vmoption PrintGC

    vmoption PrintGC true

java查看JVM线程状态时 jvm查看线程状态命令_java_13

2.6、vmtool

2.7、heapdump

2.8、getstatic(不推荐,推荐 ongl)

        通过 getstatic 命令可以方便的查看类的静态属性。使用方法为getstatic class_name field_name。

        查看 arthas 官方的 demo 中的 MatchGame。

java查看JVM线程状态时 jvm查看线程状态命令_java_14

2.9、ongl

2.10、sysprop(不常用)

        查看当前 JVM 的系统属性

使用说明:

        查看当前 JVM 的系统属性

sysprop

         查看单个属性

sysprop java.version

java查看JVM线程状态时 jvm查看线程状态命令_java查看JVM线程状态时_15

         修改单个属性

[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自动提示和补全

java查看JVM线程状态时 jvm查看线程状态命令_java_16

2.11、sysenv(不常用)

        查看当前 JVM 的环境属性。

使用说明:

sysenv