一、Jstat使用(重点)
Jstat命令是jvm调优非常重要,且非常有效的命令。具体用法如下:
1. 垃圾回收统计 jstat -gc
jstat -gc 进程id
这个命令非常常用,在线上有问题的时候,可以通过这个命令来分析问题。
下面我们来测试一下,启动一个项目,然后在终端驶入jstat -gc 进程id,得到如下结果
上面的参数分别是什么意思呢?先识别参数的含义,然后根据参数进行分析
S0C: 第一个Survivor区的容量
S1C: 第二个Survivor区的容量
S0U: 第一个Survivor区已经使用的容量
S1U:第二个Survivor区已经使用的容量
EC: 新生代Eden区的容量
EU: 新生代Eden区已经使用的容量
OC: 老年代容量
OU:老年代已经使用的容量
MC: 方法区大小(元空间)
MU: 方法区已经使用的大小
CCSC:压缩指针占用空间
CCSU:压缩指针已经使用的空间
YGC: YoungGC已经发生的次数
YGCT: 这一次YoungGC耗时
FGC: Full GC发生的次数
FGCT: Full GC耗时
GCT: 总的GC耗时,等于YGCT+FGCT
连续观察GC变化的命令
jstat -gc 进程ID 间隔时间 打印次数
举个例子:我要打印10次gc信息,每次间隔1秒
jstat -gc 进程ID 1000 10
这样就连续打印了10次gc的变化,每次隔一秒。
这个命令是对整体垃圾回收情况的统计,下面将会差分处理。
3.新生代垃圾回收统计
命令:
jstat -gcnew 进程ID [ 间隔时间 打印次数]
这个指的是当前某一次GC的内存情况
S0C:第一个Survivor的大小
S1C:第二个Survivor的大小
S0U:第一个Survivor已使用大小
S1U:第二个Survivor已使用大小
TT: 对象在新生代存活的次数
MTT: 对象在新生代存活的最大次数
DSS: 期望的Survivor大小
EC:Eden区的大小
EU:Eden区的使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
4. 新生代内存统计
jstat -gcnewcapacity 进程ID
参数含义:
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0CMX:Survivor 1区最大大小
S0C:当前Survivor 1区大小
S1CMX:Survivor 2区最大大小
S1C:当前Survivor 2区大小
ECMX:最大Eden区大小
EC:当前Eden区大小
YGC:年轻代垃圾回收次数
FGC:老年代回收次数
5. 老年代垃圾回收统计
命令:
jstat -gcold 进程ID
参数含义:
MC:方法区大小
MU:方法区已使用大小
CCSC:压缩指针类空间大小
CCSU:压缩类空间已使用大小
OC:老年代大小
OU:老年代已使用大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间,新生代+老年代
6. 老年代内存统计
命令:
jstat -gcoldcapacity 进程ID
参数含义:
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:老年代大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
7. 元数据空间统计
命令
jstat -gcmetacapacity 进程ID
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小指针压缩类空间大小
CCSMX:最大指针压缩类空间大小
CCSC:当前指针压缩类空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
二. GC分析
1、统计垃圾回收的堆信息 jstat -gc
每秒统计垃圾回收的堆信息,打印10次,
参数详解:
S0C:第一个幸存区的大小,单位KB S1C:第二个幸存区的大小 S0U:第一个幸存区的使用大小 S1U:第二个幸存区的使用大小 EC:伊甸园区的大小 EU:伊甸园区的使用大小 OC:老年代大小 OU:老年代使用大小 MC:方法区大小 MU:方法区使用大小 CCSC:压缩类空间大小 CCSU:压缩类空间使用大小 YGC:年轻代垃圾回收次数 YGCT:年轻代垃圾回收消耗时间 FGC:老年代垃圾回收次数 FGCT:老年代垃圾回收消耗时间 GCT:垃圾回收消耗总时间
如上所示的java进程,老年代空间大小为200M左右,使用的老老年代空间为100M左右,所以老年代空间充足,再看FGC与YGC,分别为3.6和4,即老年代回收次数为3.6,年轻代回收次数为4。消耗接近包含。
现在我们来看一个内存溢出的进程信息:
可以看到老年代和新生代都占用满了,并且GCT垃圾回收时间上升,但是垃圾并没有被回收调,占用依旧拉满,也就是我们常说的垃圾回收不掉信息。
查看对应log日志程序已经产生内存泄露:
标签:Survivor,回收,次数,详解,内存,JVM,大小,年代,垃圾 From: https://www.cnblogs.com/xfbk/p/17643455.html