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