在我的一个生产应用程序中,我们使用 Oracle JRockit 作为 JVM。次要 GC 频率非常高(大约每 40 秒)。但有时我们会看到频繁的 Full GC 发生,并且在此期间 Minor GC 也回收了可忽略的字节。导致应用程序应用程序失败,因为我们的应用程序需要在 1 秒内响应,而完全 GC 暂停需要超过 1 秒。
我从 GC 日志中观察到 1-Minor GC 在此期间无法回收任何字节,除了特定时期 Minor GC 回收了几乎 95-99% 的托儿所(保留区域除外)。2-我正在观察在此压实阶段请求紧急并行扫描
我的堆配置是
Heap : 10 GB
Nursery : 1GB
GC : gencon
Keeparea : 50%
CompactionRatio : 10%
gcTrigger : 40%
我们尝试将 Nursery 大小更改为 2GB 和 3GB ,其中问题频率随着 2GB 而降低,随着 3GB 而增加
为什么会导致此问题或如何进一步调查此问题的任何帮助
更新 1:
我为 GC 启用了 memdbg 模块,发现触发了 Full GC,因为 Nursery 部件高于默认限制 10000,但我可以看到 OC 也在 Nursery 中留下了大量部件。在这个问题上的任何指导