1 jps

功能描述:jps 全称 JVM Process Status Tool,命令位于 jdk 的 bin 目录下,其作用是显示当前系统的 Java 进程情况,及其 pid 号。他是 Java自带的一个命令。

code:

public class Simple {

    public static void main(String[] args) {

        while (true){


        }
    }

}

jvm监控的作用 jvm监控命令_jvm监控的作用


-q:仅仅显示 LVMID (local virtual machine id),即本地虚拟机唯一id。不显示主类的名称等。

jvm监控的作用 jvm监控命令_Java_02


-l:输出应用程序主类的全类名或如果进程执行的是jar包,则输出jar完整路径

jvm监控的作用 jvm监控命令_JVM_03


-m:输出虚拟机进程启动时传递给主类main()的参教

jvm监控的作用 jvm监控命令_Java_04


-v: 列出jvm参数, -Xms20m -Xmx50m是启动程序指定的jvm参数。设置启动参数:-Xms100m -Xms100m

jvm监控的作用 jvm监控命令_jvm监控的作用_05


以上参数可以综合使用:

jvm监控的作用 jvm监控命令_JVM_06

2 jstat

jstat(Java Virtual Machine statistics monitoring tool)它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。

它的基本使用语法为:

#jstat 
#-t: 在输出信息前加上一个Timestamp列,显示程序的运行时间。单位:秒。
#-h: 可以在周明性数据輸出时,输出多少行数据后輸出一个表头信息
#vmid: java进程ID
#-interval: 用于指定输出统计数据的周期,单位为毫秒,即:查识间隔
#-count:用于指定查询的总次数
jstat -<option> [-t] [-h<lines>] <vmid> [<interval>[<count>]]

选项 option可以由以下值构成:

类装载相关的:

-class:显示ClassLoader的相关信息:类的装载、卸载数量、总空间类装载所消耗的时间等

垃圾回收相关的:

-gc:显示与GC相关的堆信息。包括Eden区、两个 Survivor区、老年代永久代等的容量、早用空间、GC时间合计等信息。

-capacity:显示内容与-gc基本相同,但输出主要关注]ava堆各个区域使用到的最大、最小空间。

-gcutil:显示内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比。

-gccause:与-gcutil功能一样,但是会额外输出导致最后一次或当前正在发生的GC产生的原因 。

-gcnew:显示新生代GC状况。

-gcnewcapacity:显示内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间。

-gold:显示老年代GC状况

2.1 code

public class Simple {


    /**
     * VM options: -Xms100m -Xms100m
     */
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        String info = scanner.next();
    }


}

2.2 类装载

显示ClassLoader的相关信息:类的装载、卸载数量、总空间类装载所消耗的时间等

jvm监控的作用 jvm监控命令_JVM_07


1秒打印一次,打印5次:

#-interval: 用于指定输出统计数据的周期,单位为毫秒,即:查识间隔
#-count:用于指定查询的总次数
#-t: 在输出信息前加上一个Timestamp列,显示程序的运行时间。单位:秒。
#-h: 可以在周明性数据輸出时,输出多少行数据后輸出一个表头信
jstat -class -t -h2 6928 1000 10

jvm监控的作用 jvm监控命令_应用程序_08

2.2 垃圾回收

#-gc:显示与GC相关的堆信息。包括Eden区、两个 Survivor区、老年代永久代等的容量、早用空间、GC时间合计等信息。
jstat -gc 6928

s0总容量、S1总容量、S0使用容量、S1使用容量、Eden总容量、Eden使用容量、Old总容量、Old使用容量、方法区总容量、方法区使用容量、压缩类总容量、压缩类使用容量、YongGC次数、YongGC花费时间、FullGC次数、FullGC花费时间、GC总花费时间

jvm监控的作用 jvm监控命令_应用程序_09


code

public class GCTest {

    /**
     * VM options:-Xms60m -Xmx60m
     */
    public static void main(String[] args) {

        List<Object> list = new ArrayList<>();
        for (int i = 1; i <= 1000; i++) {
            //100KB
            byte[] arr = new byte[1024 * 100];
            list.add(arr);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

}

jvm监控的作用 jvm监控命令_应用程序_10

#-gcutil查看OOM
jstat -gcutil 12464 1000 30

jvm监控的作用 jvm监控命令_应用程序_11

jvm监控的作用 jvm监控命令_Java_12

3 jmap

jmap (JVM Memory Map):作用一方面是获取dump文件(堆转储快照文件、二进制文件)它还可以获取目标Java进程的内存相关信息,包括]ava堆各区域的使用情况、堆中对象的统计信息.、类加载信息等。

它的基本使用语法为:

jmap [option] <pid>
jmap [option] <executable <core>>
jmap [option] [server_id@]<remote server IP or hostname>

其中option包括:

jvm监控的作用 jvm监控命令_应用程序_13

导出内存映射文件:

一般来说,使用jmap指令生成dump文件的操作算得上是最常用的jmap命令之一,将堆中所有存活对象导出至一个文件之中。

说明
(1)通常在写 Heap Dump 文件前会触发一次Full GC,所以 heap dump文件里保存的都是FullGC后留下的对象信息。
(2)由于生成dump文件比较耗时,因此大家需要耐心等待,尤其是大内存镜像生成dump文件则需要耗费更长的时间来完成。

3.1 手动的方式

jmap -dump:format=b,file=<filename,hprof> <pid>
#live 只保存堆中存活的对象
jmap -dump:live,format=b,file=<filename,hprof> <pid>

code

/**
     * VM options:-Xms60m -Xmx60m
     */
    public static void main(String[] args) {
        List<Object> list = new ArrayList<>();
        for (int i = 1; i <= 1000; i++) {
            //100KB
            byte[] arr = new byte[1024 * 100];
            list.add(arr);
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
#命令
jmap -dump:format=b,file=d:\temp.hprof 17788
jmap -dump:live,format=b,file=d:\temp_live.hprof 17788

jvm监控的作用 jvm监控命令_JVM_14


jvm监控的作用 jvm监控命令_Java_15

3.2 自动方式

当程序发生OOM退出系统时,一些瞬时信息都随着程序的终止而消失,而重现OOM问题往往比较困难或者耗时。此时若能在OOM时,自动导出dump文件就显得非常迫切。

获取快照文件的方法:

-XX:+HeapDumpOnOutOfMemoryError:在程序发生OOM时,导出应用程序的当前堆快照。
-XX:HeapDumpPath:可以指定堆快照的保存位置。

例如:

-Xms60m -Xmx60m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\temp_oom.hprof

修改VM参数:

jvm监控的作用 jvm监控命令_应用程序_16


jvm监控的作用 jvm监控命令_应用程序_17


jvm监控的作用 jvm监控命令_JVM_18


jvm监控的作用 jvm监控命令_JVM_19


jvm监控的作用 jvm监控命令_JVM_20