近日公司线上一个项目出现卡顿现象,查看应用日志并没有发现错误日志,服务器资源占用也不高,一切看起来都很正常,然后查看了jvm 各个区域的使用情况,执行命令 jstat -gcutil 1 250 20, 显示如下
指标说明
S0: Survivor FROM 使用百分比
S1: Survivor To 使用百分比
E: Eden 区域使用百分比
O: 老年代使用百分比
M: 元空间使用百分比
CCS: 压缩类空间利用率为百分比
YGC: 年轻代 GC次数
YGCT: 年轻代GC耗时
FGC: FullGC次数
FGCT: FullGC 耗时
GCT: FGCT + YGCT, GC总耗时
从图中可以看出FullGC 次数5242次,YGC 次数更是达到了3407557次,经过观察大概12分钟左右触发一次,每次接近4秒。
根据上图可以知道FullGC和YGC 发生频率过高,于是查看了jvm 参数,发现在项目部署时,并没有指定-Xms -Xmx -Xmn 相关参数,造成堆内存、老年代、新生代内存分配过小,新生对象在新生代引用未释放的情况下,触发YangGC,大量新生对象存活导致s1空间不足&