Jps

以显示当前系统中所有java进程

image.png

Jinfo

查看正在运行的Java程序的扩展参数

查看JVM的参数

image.png

查看java系统属性

等同于System.getProperties()

image.png

Jstat

jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令格式:
jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]

类加载统计

image.png

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

垃圾回收统计

image.png

  • S0C:第一个Survivor区的空间
  • S1C:第二个Survivor区的空间
  • S0U:第一个Survivor区的使用空间
  • S1U:第二个Survivor区的使用空间
  • EC:Eden区的总空间
  • EU:Eden区的使用空间
  • OC:Old区的总空间
  • OU:Old区的已使用空间
  • MC:元空间的总空间
  • MU:元空间的使用空间
  • CCSC:压缩类的总空间
  • CCSU:压缩类的使用空间
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

堆内存统计

image.png

  • NGCMN:新生代最小空间
  • NGCMX:新生代最大空间
  • NGC:当前新生代空间
  • S0C:第一个Survivor区空间
  • S1C:第二个Survivor区空间
  • EC:Eden区的总空间
  • OGCMN:老年代最小空间
  • OGCMX:老年代最大空间
  • OGC:当前老年代空间
  • OC:当前老年代空间
  • MCMN:最小元空间大小
  • MCMX:最大元空间大小
  • MC:当前元空间大小
  • CCSMN:最小压缩类空间大小
  • CCSMX:最大压缩类空间大小
  • CCSC:当前压缩类空间大小
  • YGC:年轻代GC次数
  • FGC:老年代GC次数

新生代垃圾回收统计

image.png

  • S0C:第一个Survivor区空间
  • S1C:第二个Survivor区空间
  • S0U:第一个Survivor区的使用空间
  • S1U:第二个Survivor区的使用空间
  • TT:对象在新生代存活的次数
  • MTT:对象在新生代存活的最大次数
  • DSS:期望Survivor区大小
  • EC:Eden区的空间
  • EU:Eden区的使用空间
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间

新生代内存统计

image.png

  • NGCMN:新生代最小空间
  • NGCMX:新生代最大空间
  • NGC:当前新生代空间
  • S0CMX:最大第一个Survivor区空间
  • S0C:当前第一个Survivor区空间
  • S1CMX:最大第二个Survivor区空间
  • S1C:当前第二个Survivor区空间
  • ECMX:最大Eden区空间
  • EC:当前Eden区空间
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数

老年代垃圾回收统计

image.png

  • MC:元空间的总空间
  • MU:元空间的使用空间
  • CCSC:压缩类的总空间
  • CCSU:压缩类的使用空间
  • OC:Old区的总空间
  • OU:Old区的已使用空间
  • YGC:年轻代GC次数
  • FGC:老年代GC次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

老年代内存统计

image.png

  • OGCMN:老年代最小空间
  • OGCMX:老年代最大空间
  • OGC:当前老年代空间
  • OC:当前老年代空间
  • YGC:年轻代GC次数
  • FGC:老年代GC次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

元空间内存统计

image.png

  • MCMN:最小元空间大小
  • MCMX:最大元空间大小
  • MC:当前元空间大小
  • CCSMN:最小压缩类空间大小
  • CCSMX:最大压缩类空间大小
  • CCSC:当前压缩类空间大小
  • YGC:年轻代GC次数
  • FGC:老年代GC次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

总垃圾回收统计

image.png

  • S0:第一个Survivor区当前使用比例
  • S1:第二个Survivor区当前使用比例
  • E:Eden区使用比例
  • O:Old区使用比例
  • M:元空间使用比例
  • CCS:压缩使用比例
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

Jmap

可以用来查看内存信息

堆的对象统计

  1. jmap -histo 29420 > xxx.txt

image.png

  • Num:序号
  • Instances:实例数量
  • Bytes:占用空间大小
  • Class Name:类名

堆信息

image.png

堆内存dump

image.png

也可以在设置内存溢出的时候自动导出dump文件(内存很大的时候,可能会导不出来)
1.-XX:+HeapDumpOnOutOfMemoryError
2.-XX:HeapDumpPath=输出路径

-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError - XX:HeapDumpPath=E:\java-learning\oomdump.dump
public class OutOfMemoryDump {

    /**
     *  设置JVM参数
     *  -Xms10m
     *  -Xmx10m
     *  -XX:+PrintGCDetails
     *  -XX:+HeapDumpOnOutOfMemoryError
     *  -XX:HeapDumpPath=路径
     */
    public static void main(String[] args) {

        //-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:\java-learning
        List<Object> list = new ArrayList<>();
        int i = 0;
        while(true){
            list.add(new User(i++, UUID.randomUUID().toString()));
        }
    }
}

image.png

image.png

可以使用jvisualvm命令工具导入文件分析
image.png

Jstatck

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

image.png