一个简单但实用的查看JVM内存是否存在内存溢出以及查看GC情况的命令

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,如果回收后还不够则会转移到后一区

 

你可能感兴趣的:(一个简单但实用的查看JVM内存是否存在内存溢出以及查看GC情况的命令)