Java 诊断利器 Arthas JVM命令

本文介绍了JVM的一系列管理命令,包括dashboard用于查看系统实时数据,thread用于查看线程信息,jvm用于查看JVM基本信息,memory用于检查内存状态,vmoption用于查看和修改VM诊断选项,以及heapdump、ongl、sysprop和sysenv等其他命令的使用,帮助开发者监控和诊断JVM性能问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、jvm 相关命令介绍

 

命令说明
dashboard当前系统的实时数据面板
getstatic查看类的静态属性
heapdumpdump 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

数据说明:

IDJava 级别的线程 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 相关:

COUNTJVM 当前活跃的线程数
DAEMON-COUNTJVM 当前活跃的守护线程数
PEAK-COUNT从 JVM 启动开始曾经活着的最大线程数
STARTED-COUNT从 JVM 启动开始总共启动过的线程次数
DEADLOCK-COUNTJVM 当前死锁的线程数

 文件描述符相关:

MAX-FILE-DESCRIPTOR-COUNTJVM 进程最大可以打开的文件描述符数
OPEN-FILE-DESCRIPTOR-COUNTJVM 当前打开的文件描述符数

2.4、memory

        查看 JVM 内存信息。

使用说明:

    memory

 数据说明:

heap堆大小
ps_eden_spaceEden 区大小
ps_survivor_spaceSurvivor 区大小
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值