线上每天某个时间段频繁 FGC,导致 CPU 异常高
每天基本上到了某个时间段,客户使用频繁后,线上 CPU 就会往上蹭. 我尝试使用 jstat 去查看 gc 的情况,发现当 E 区满了之后,直接 FGC, S0,S1 在这段时间永远都是 0.00, O 区基本上一直都是 99%以上的状态.
# jstat -gcutil 153221 1000 100 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 0.00 32.73 99.33 92.54 85.47 15969 450.680 4209 15061.630 15512. 309 0.00 0.00 99.85 99.33 92.54 85.47 15969 450.680 4209 15061.630 15512. 309 0.00 0.00 76.47 99.33 92.54 85.47 15969 450.680 4210 15063.630 15512. 309 0.00 0.00 96.83 99.33 92.54 85.47 15969 450.680 4210 15063.630 15512.309 0.00 0.00 88.25 99.33 92.54 85.47 15969 450.680 4211 15065.630 15512.309 0.00 0.00 99.70 99.33 92.54 85.47 15969 450.680 4211 15065.630 15512.309
3 秒中一次 FGC,大部分 CPU 都用在 GC 线程上面. 过了这段时间后系统就会恢复正常,CPU 就会恢复稳定. 现在想请教下各位: 什么情况下会造成 Eden 区满了之后,直接触发 Full GC, 而不是 YGC. 另外,即便是现在 CPU 降下来了, gc 正常了, ps_old_gen 使用率依旧很高. (2685M/2731M), 如果是内存泄露那么不应该 CPU 一直都没法降下来吗?
请教下各位,遇到这种问题应该朝着什么方向去排查呢?