每天基本上到了某个时间段,客户使用频繁后,线上 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 一直都没法降下来吗?
请教下各位,遇到这种问题应该朝着什么方向去排查呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.