Jps
以显示当前系统中所有java进程
Jinfo
查看正在运行的Java程序的扩展参数
查看JVM的参数
查看java系统属性
等同于System.getProperties()
Jstat
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令格式:
jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]
类加载统计
- Loaded:加载class的数量
- Bytes:所占用空间大小
- Unloaded:未加载数量
- Bytes:未加载占用空间
- Time:时间
垃圾回收统计
- 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:垃圾回收消耗总时间
堆内存统计
- NGCMN:新生代最小空间
- NGCMX:新生代最大空间
- NGC:当前新生代空间
- S0C:第一个Survivor区空间
- S1C:第二个Survivor区空间
- EC:Eden区的总空间
- OGCMN:老年代最小空间
- OGCMX:老年代最大空间
- OGC:当前老年代空间
- OC:当前老年代空间
- MCMN:最小元空间大小
- MCMX:最大元空间大小
- MC:当前元空间大小
- CCSMN:最小压缩类空间大小
- CCSMX:最大压缩类空间大小
- CCSC:当前压缩类空间大小
- YGC:年轻代GC次数
- FGC:老年代GC次数
新生代垃圾回收统计
- S0C:第一个Survivor区空间
- S1C:第二个Survivor区空间
- S0U:第一个Survivor区的使用空间
- S1U:第二个Survivor区的使用空间
- TT:对象在新生代存活的次数
- MTT:对象在新生代存活的最大次数
- DSS:期望Survivor区大小
- EC:Eden区的空间
- EU:Eden区的使用空间
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收消耗时间
新生代内存统计
- NGCMN:新生代最小空间
- NGCMX:新生代最大空间
- NGC:当前新生代空间
- S0CMX:最大第一个Survivor区空间
- S0C:当前第一个Survivor区空间
- S1CMX:最大第二个Survivor区空间
- S1C:当前第二个Survivor区空间
- ECMX:最大Eden区空间
- EC:当前Eden区空间
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
老年代垃圾回收统计
- MC:元空间的总空间
- MU:元空间的使用空间
- CCSC:压缩类的总空间
- CCSU:压缩类的使用空间
- OC:Old区的总空间
- OU:Old区的已使用空间
- YGC:年轻代GC次数
- FGC:老年代GC次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
老年代内存统计
- OGCMN:老年代最小空间
- OGCMX:老年代最大空间
- OGC:当前老年代空间
- OC:当前老年代空间
- YGC:年轻代GC次数
- FGC:老年代GC次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
元空间内存统计
- MCMN:最小元空间大小
- MCMX:最大元空间大小
- MC:当前元空间大小
- CCSMN:最小压缩类空间大小
- CCSMX:最大压缩类空间大小
- CCSC:当前压缩类空间大小
- YGC:年轻代GC次数
- FGC:老年代GC次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
总垃圾回收统计
- S0:第一个Survivor区当前使用比例
- S1:第二个Survivor区当前使用比例
- E:Eden区使用比例
- O:Old区使用比例
- M:元空间使用比例
- CCS:压缩使用比例
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
Jmap
可以用来查看内存信息
堆的对象统计
jmap -histo 29420 > xxx.txt
- Num:序号
- Instances:实例数量
- Bytes:占用空间大小
- Class Name:类名
堆信息
堆内存dump
也可以在设置内存溢出的时候自动导出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()));
}
}
}
可以使用jvisualvm命令工具导入文件分析
Jstatck
jstack用于生成java虚拟机当前时刻的线程快照