JVM性能调优监控工具
Jps
以显示当前系统中所有java进程
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NDc2Mzg5MjctYWI0ZTNhOTEtNDgzNy00YTQ5LTg1YjEtZGIzOWM3ODMxMTdjLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=474&margin=[object Object]&name=image.png&originHeight=474&originWidth=614&size=538905&status=done&style=none&width=614)
Jinfo
查看正在运行的Java程序的扩展参数
查看JVM的参数
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NDc4MDA5ODQtODhiMDk0M2UtM2RhYy00MmNlLTlhY2ItMTE4MWY5MTcxNWQ0LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=151&margin=[object Object]&name=image.png&originHeight=388&originWidth=1918&size=1146164&status=done&style=none&width=746)
查看java系统属性
等同于System.getProperties()
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NDc5NTU3MDQtMjI2YzFhMTUtYjc2ZC00Y2UyLTlkNzgtNzJmN2QxYWIwNWI4LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=278&margin=[object Object]&name=image.png&originHeight=664&originWidth=1780&size=1904914&status=done&style=none&width=746)
Jstat
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令格式:
jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]
类加载统计
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NDgwODM4ODYtMGEzZjVmZTctY2E0Yi00YThjLWFjNWItMDA2MzQ1NjcyMzk0LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=193&margin=[object Object]&name=image.png&originHeight=193&originWidth=462&size=169423&status=done&style=none&width=462)
- Loaded:加载class的数量
- Bytes:所占用空间大小
- Unloaded:未加载数量
- Bytes:未加载占用空间
- Time:时间
垃圾回收统计
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NDgxNjE0NjAtZWFlY2U2M2YtYWI5OS00YjJhLTkwMjUtNWRjYjQ1YTZiYWE1LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=199&margin=[object Object]&name=image.png&originHeight=199&originWidth=1340&size=478950&status=done&style=none&width=1340)
- 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:垃圾回收消耗总时间
堆内存统计
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3lQNXgmo-1589759922630)(https://cdn.nlark.com/yuque/0/2020/png/440247/1588648393408-1f50f937-d6c6-4766-8747-ff4d96039ba3.png#align=left&display=inline&height=200&margin=%5Bobject%20Object%5D&name=image.png&originHeight=200&originWidth=1583&size=546355&status=done&style=none&width=1583)]
- 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](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NDg1Njk0ODQtNmJhODE0MjgtOWI1Yy00MmQxLWJhOTEtNTg5MmMyNDVlZGZiLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=108&margin=[object Object]&name=image.png&originHeight=108&originWidth=822&size=167062&status=done&style=none&width=822)
- S0C:第一个Survivor区空间
- S1C:第二个Survivor区空间
- S0U:第一个Survivor区的使用空间
- S1U:第二个Survivor区的使用空间
- TT:对象在新生代存活的次数
- MTT:对象在新生代存活的最大次数
- DSS:期望Survivor区大小
- EC:Eden区的空间
- EU:Eden区的使用空间
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收消耗时间
新生代内存统计
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NDg3MTkyODEtNzlkYjkxNGUtYmI2Zi00NzM5LWE3M2MtNGUzOGEzMWFjNzRhLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=119&margin=[object Object]&name=image.png&originHeight=119&originWidth=1099&size=227595&status=done&style=none&width=1099)
- NGCMN:新生代最小空间
- NGCMX:新生代最大空间
- NGC:当前新生代空间
- S0CMX:最大第一个Survivor区空间
- S0C:当前第一个Survivor区空间
- S1CMX:最大第二个Survivor区空间
- S1C:当前第二个Survivor区空间
- ECMX:最大Eden区空间
- EC:当前Eden区空间
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
老年代垃圾回收统计
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NDg4MTE0NTEtYThkNWFlMzctNjAyYS00Nzk3LTljMzItMTZlODdiZjEyYjQ5LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=213&margin=[object Object]&name=image.png&originHeight=213&originWidth=927&size=360536&status=done&style=none&width=927)
- MC:元空间的总空间
- MU:元空间的使用空间
- CCSC:压缩类的总空间
- CCSU:压缩类的使用空间
- OC:Old区的总空间
- OU:Old区的已使用空间
- YGC:年轻代GC次数
- FGC:老年代GC次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
老年代内存统计
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NDg4ODc2MzUtM2NjZDRkMTEtNjFmMi00NzEwLTkxYjUtZWZkNmY0OGFmNmNkLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=280&margin=[object Object]&name=image.png&originHeight=280&originWidth=833&size=447521&status=done&style=none&width=833)
- OGCMN:老年代最小空间
- OGCMX:老年代最大空间
- OGC:当前老年代空间
- OC:当前老年代空间
- YGC:年轻代GC次数
- FGC:老年代GC次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
元空间内存统计
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NDg5NjQ0MTEtNGZkNTIwZGUtZDFlZS00Y2ZlLTk4MzEtZTBjNWY3NzA0NjNkLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=155&margin=[object Object]&name=image.png&originHeight=155&originWidth=940&size=267667&status=done&style=none&width=940)
- MCMN:最小元空间大小
- MCMX:最大元空间大小
- MC:当前元空间大小
- CCSMN:最小压缩类空间大小
- CCSMX:最大压缩类空间大小
- CCSC:当前压缩类空间大小
- YGC:年轻代GC次数
- FGC:老年代GC次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
总垃圾回收统计
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NDkwMjk4NDAtNmEzMzczNTgtOTAwMy00ODQ3LWFhMmUtY2U4ZDViOTFmNjJlLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=235&margin=[object Object]&name=image.png&originHeight=235&originWidth=918&size=399949&status=done&style=none&width=918)
- S0:第一个Survivor区当前使用比例
- S1:第二个Survivor区当前使用比例
- E:Eden区使用比例
- O:Old区使用比例
- M:元空间使用比例
- CCS:压缩使用比例
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
Jmap
可以用来查看内存信息
**堆的对象统计
**
jmap -histo 29420 > xxx.txt
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NDkzNDQ1NjItZTQ2YTE0OWItOGIxZS00NzQ1LTgyMDItNzRhMTg0ODQ0YzY1LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=785&margin=[object Object]&name=image.png&originHeight=785&originWidth=1552&size=122390&status=done&style=none&width=1552)
- Num:序号
- Instances:实例数量
- Bytes:占用空间大小
- Class Name:类名
堆信息
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NDk0NTc0NjgtNzU3N2QyZjItZDA3ZS00MmFmLWI0OWEtN2FmNTZhZjNhYjg4LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=783&margin=[object Object]&name=image.png&originHeight=783&originWidth=1046&size=1450586&status=done&style=none&width=1046)
堆内存dump
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NDk1NzE3OTYtNWVjNjc5YjQtMGUwMi00NjMzLWEzOWMtMjBhODI4MmFiZDQwLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=151&margin=[object Object]&name=image.png&originHeight=151&originWidth=783&size=201101&status=done&style=none&width=783)
也可以在设置内存溢出的时候自动导出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](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NTAwMzA0ODQtMzNiMWY2OGUtMDYwOC00ZjFlLTlkMGYtY2FkNjhjNGJkMzRmLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=307&margin=[object Object]&name=image.png&originHeight=307&originWidth=1006&size=542486&status=done&style=none&width=1006)
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NTA2MTE2MTktMjMxNzkyYmQtOWY0My00MTNhLWIwZDUtMThkYjI3MDQ1ZDY1LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=344&margin=[object Object]&name=image.png&originHeight=344&originWidth=801&size=28916&status=done&style=none&width=801)
可以使用jvisualvm命令工具导入文件分析
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NTAzNDMwMzYtNjliMDRhMGEtNjNmMi00NTM5LWEwMzYtYzUxNTI1ZGIwNWI5LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=1013&margin=[object Object]&name=image.png&originHeight=1013&originWidth=1936&size=173396&status=done&style=none&width=1936)
Jstatck
jstack用于生成java虚拟机当前时刻的线程快照
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNDQwMjQ3LzE1ODg2NTA4MDA4MzktY2Q5Mjk0YjYtOTMyYy00ZDZmLTgxOTQtYzI4NGE2YWM2ODljLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=431&margin=[object Object]&name=image.png&originHeight=431&originWidth=970&size=64407&status=done&style=none&width=970)