0

在我的生产应用程序之一,我们使用的是Oracle JRockit的JVM作为。小GC频率非常高(大约每40秒)。但是有一段时间我们看到频繁的Full GC发生,在那段时间Minor GC也收回可以忽略的字节。导致应用程序失败,因为我们的应用程序需要在1秒和完整的GC暂停响应正在服用超过1秒。频繁的完全GC和零回收过程中,较小GC

我有一些来自GC日志的观察 1-轻微GC无法在此期间回收任何字节,而不是特定的时期Minor GC回收几乎95%至95%的苗圃(除了保留区域)。 2 - 我观察紧急并行清理要求在这个压缩阶段

我堆配置都

Heap   : 10 GB 
Nursery   : 1GB 
GC    : gencon 
Keeparea  : 50% 
CompactionRatio : 10% 
gcTrigger  : 40% 

我们试图改变幼儿园大小为2GB & 3GB,其中问题的频率有2GB和下降与3GB

任何帮助增加了为什么这个问题是造成或如何作进一步调查

Upda te 1:

我已启用Memdbg模块进行GC,发现Full GC已触发,因为苗圃零件高于默认限制10000,但我可以看到OC也在苗圃中留下大量零件。在这个问题上

+0

我在使用JRockit时遇到了一些问题。但是,如果我是你,我会尝试更好地了解不同存储区域的填充等级。不知道的JRockit的车载工具(我建议的JConsole与热点),我可以指出你YourKit,它提供了一个15天的试用,这应该足以得到一种感觉,它的内存区域都是人满为患。 – Jonathan

回答

0

所以我们把它解决了,任何指导才能到问题的深度,我们已经启用详细memdbg模块,这给了我们为什么GC渐渐引发的信息。完整的GC用理由分配请求trigerring失败,其按照Oracle文档时堆的苗圃部分,因为它们加入从R28.2.5检查每个微小GC期间检查在苗圃整体部分被分段发生,并且如果它是大于定义的多限制(默认值为10K)较小的GC将被中止,并且Full GC将被触发且原因分配请求失败。

要解决这一点,我们下面的参数添加禁用此检查,之后系统工作正常。

-XXNurseryPartsLimits=0