【JVM虚拟机】JVM常用命令工具汇总

目录

jps命令 :

jstat命令 :

jinfo命令: 

jstack命令:

jconsole命令:

jvisualvm命令:


jps命令 :

用于查看所有 Java进程

jps 显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一 ID

jps -l 输出主类的全名,如果进程执行的是 Jar 包,输出 Jar全名称 

 jps -v 输出虚拟机进程启动时 JVM参数

jstat命令 :

使用于监视虚拟机各种运行状态信息的命令行工具。 它可以显示本地或者远程(需要远程主机提供 RMI 支持)虚拟机进程中的类信息、内存、垃圾收集、JIT 编译等运行数据,在没有 GUI,只提供了纯文本控制台环境的服务器上,它将是运行期间定位虚拟机性能问题的首选工具。

jstat -class vmid 类加载统计

Loaded加载class的数量
Bytes所占用空间大小
Unloaded未加载数量
Bytes未加载占用空间
Time时间

jstat -gc vmid 垃圾回收统计 

S0C新生代中第一个survivor(幸存区)的容量 (字节)
S1C新生代中第二个survivor(幸存区)的容量 (字节)
S0U 新生代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U新生代中第二个survivor(幸存区)目前已使用空间 (字节)
EC 新生代中Eden区的容量 (字节)
EU 新生代中Eden区目前已使用空间 (字节)
OC老年代的容量 (字节)
OU老年代目前已使用空间 (字节)
MCmetaspace(元空间)的容量 (字节)
MUmetaspace(元空间)目前已使用空间 (字节)
YGC从应用程序启动到采样时新生代中GC次数
YGCT从应用程序启动到采样时新生代中GC所用时间(s)
FGC从应用程序启动到采样时Full GC的次数
FGCT从应用程序启动到采样时Full GC所用时间(s)
GCT从应用程序启动到采样时GC用的总时间(s)

jstat -gccapacity vmid 堆内存统计

NGCMN新生代(young)中初始化(最小)的大小(字节)
NGCMX新生代(young)的最大容量(字节)
NGC新生代(young)中当前的容量(字节)
S0C新生代中第一个survivor(幸存区)的容量 (字节)
S1C新生代中第二个survivor(幸存区)的容量(字节)
EC新生代中Eden区的容量(字节)
OGCMN老年代中初始化(最小)的大小(字节)
OGCMX老年代的最大容量(字节)
OGC老年代当前新生成的容量 (字节)
OC老年代的容量(字节)
MCMNmetaspace(元空间)中初始化(最小)的大小(字节)
MCMXmetaspace(元空间)的最大容量(字节)
MC metaspace(元空间)当前新生成的容量(字节)
CCSMN最小压缩类空间大小
CCSMX最大压缩类空间大小
CCSC当前压缩类空间大小
YGC从应用程序启动到采样时新生代中GC次数
FGC从应用程序启动到采样时Full GC次数

jstat -gcmetacapacity vmid 元空间统计 

MCMN最小元数据容量
MCMX 最大元数据容量
MC当前元数据空间大小
CCSMN最小压缩类空间大小
CCSMX最大压缩类空间大小
CCSC当前压缩类空间大小
YGC从应用程序启动到采样时新生代中GC次数
FGC从应用程序启动到采样时Full GC次数
FGCT从应用程序启动到采样时Full GC所用时间(s)
GCT从应用程序启动到采样时GC用的总时间(s)

jstat -gcnew vmid 新生代统计

S0C新生代中第一个survivor(幸存区)的容量 (字节)
S1C新生代中第二个survivor(幸存区)的容量 (字节)
S0U新生代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U新生代中第二个survivor(幸存区)目前已使用空间 (字节)
TT持有次数限制
MTT最大持有次数限制
DSS期望的幸存区大小
EC新生代中Eden区的容量 (字节)
EU新生代中Eden区目前已使用空间 (字节)
YGC从应用程序启动到采样时新生代中GC次数
YGCT从应用程序启动到采样时Full GC所用时间(s)

jstat -gcold vmid 老年代统计

MCmetaspace(元空间)的容量 (字节)
MUmetaspace(元空间)目前已使用空间 (字节)
CCSC压缩类空间大小
CCSU压缩类空间使用大小
OCOld代的容量 (字节)
OUOld代目前已使用空间 (字节)
YGC从应用程序启动到采样时新生代中GC次数
FGC从应用程序启动到采样时Full GC的次数
FGCT从应用程序启动到采样时Full GC所用时间(s)
GCT从应用程序启动到采样时Full GC用的总时间(s)

jstat -gcutil -vmid 老年代统计 

S0 新生代中第一个survivor(幸存区)已使用的占当前容量百分比
S1新生代中第二个survivor(幸存区)已使用的占当前容量百分比
E 新生代中Eden(伊甸园)已使用的占当前容量百分比
O old代已使用的占当前容量百分比
M metaspace代已使用的占当前容量百分比
YGC 从应用程序启动到采样时新生代中GC次数
YGCT从应用程序启动到采样时新生代中GC所用时间(s)
FGC从应用程序启动到采样时Full GC的次数 
FGCT从应用程序启动到采样时Full GC所用时间(s)
GCT从应用程序启动到采样时GC用的总时间(s)

jinfo命令: 

Configuration Info for Java,显示JVM虚拟机各项参数

jinfo vmid 输出当前 jvm进程的全部参数和系统属性,第一部分是系统属性,第二部分是 JVM参数。

jinfo -flags vmid 输出全部JVM参数

jinfo -flag InitialHeapSize vmid 查看堆的初始容量

jinfo -flag PrintGC vmid 查看是否开启GC日志,如果没有打开,则输出:-XX:-PrintGC。使用+PrintGC开启

jstack命令:

用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合信息。生成线程快照的目的主要是定位线程长时间出现停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者在等待些什么资源。

我们可以根据一个死锁案例 并结合这个命令来看

/**
 * @author CC
 * @version 1.0
 * @since2023/9/15
 */
public class demo3 {
    private static Object objLock1 = new Object();	// 对象锁1
    private static Object objLock2 = new Object();	// 对象锁2

    public static void main(String[] args) {
        new Thread(() -> {
            synchronized (objLock1) {
                System.out.println(Thread.currentThread().getName() + "获取对象锁1");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                System.out.println(Thread.currentThread().getName() + "等待获取对象锁2");
                synchronized (objLock2) {
                    System.out.println(Thread.currentThread().getName() + "获取对象锁2");
                }
            }
        }, "线程 1").start();

        new Thread(() -> {
            synchronized (objLock2) {
                System.out.println(Thread.currentThread().getName() + "获取对象锁2");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                System.out.println(Thread.currentThread().getName() + "等待获取对象锁1");
                synchronized (objLock1) {
                    System.out.println(Thread.currentThread().getName() + "获取对象锁1");
                }
            }
        }, "线程 2").start();
    }
}

运行该案例 

jstack vmid 用于生成虚拟机当前时刻的线程快照。 

jconsole命令:

这个命令可以打开一个java提供的一个 java监视和管理的可视化工具

从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。

jvisualvm命令:

这个命令可以打开一个VisualVM可视化工具

VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值