jstat -gcutil pid 2000:2秒钟打印一次内存占用和GC情况
可以查看内存占用情况,GC次数及耗时,以及每次GC成果
S0:幸存区1占用率
S1:幸存区2占用率
E:Eden区占用率
O:老年区占用率
M:元数据区(java8,相当于java7及之前的永久代的概念)使用大小
ccs:压缩后使用率
YGC:young gc 次数,
YGCT:young gc耗时
FGC:full gc次数
FGCT:full gc耗时
GCt:GC共耗时
可以通过每次GC后 各区的占用率发生的变化来判断GC成果,
如果FULL GC频繁说明内存已经存在溢出可能或已经溢出,应用处理能力将会下降甚至停摆,因为大量时间在GC上面
如果YGC频繁,s0,s1,eden区使用率又没有明显下降,也需要注意,他们中的数据在增长到一定程度时,可能会进入old区,需要观察full gc情况
如果每次YGC后,但是s0,s1,eden区内存使用下降明显,一般不会有问题,说明jvm中存在了占比较重的短生命周期对象,能及时回收掉释放给其它请求或任务使用,只要保持获取与释放平衡就不会有太大问题
ps:当创建对象时前区剩余空间不够的时候就会触发YGC,如果回收后还不够则会转移到后一区