0

私の運用アプリケーションの1つでは、Oracle JRockitをJVMとして使用しています。マイナーGC頻度は非常に高い(約40秒ごと)。しかし、しばらくの間フルGCが頻繁に発生し、その間マイナーGCは無視できるバイトを再利用します。アプリケーションの応答が1秒で要求され、完全なGCの一時停止が1秒以上かかるため、アプリケーションアプリケーションが失敗します。GC中に完全なGC&ゼロ再生が頻繁に発生

GCログからいくつかの観測があります。 1マイナーGCは、特定の期間以外の期間に任意のバイトを再利用できません。マイナーGCは、託児所のほぼ95〜99%を再利用します。 2 - 私が観察しています緊急パラレルスイープは、問題の頻度が2GBととともに減少

私のヒープの設定が

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

我々が2GB & 3ギガバイトに保育園のサイズに変更してみましたされ、この圧縮フェーズ中を要求しました3ギガバイト

と、この問題が発生した理由を任意のヘルプを高めたり、このさらなる

UPDAを調査する方法te 1:

私はGC用のmemdbgモジュールを有効にしており、Nurseryパーツがデフォルトの上限10000よりも高いためFull GCがトリガーされていることがわかりましたが、OCもナーサリの部品を多く残しています。この件に関するガイダンス

+0

JRockitでの私の経験はちょっと弱いです。しかし、私があなただったら、さまざまな記憶域の塗りつぶしグレードについてより深く理解しようとします。 JRockitのオンボードツール(HotSpotのJConsoleをお勧めします)を知らずに、あなたのYourKitに15日間の試用版を提供することができます。 – Jonathan

答えて

0

問題の深みを得るために解決したので、memdbgモジュールの詳細を有効にして、GCがトリガーされた理由を説明しました。完全なGCは、理由があるトリガリングでした。割り当て要求が失敗しました。ヒープのナーサリ部分が断片化され、R28.2.5からのチェックを追加して小さなGCごとに保育所の全体的な部分をチェックし、 limit(デフォルトは10K)マイナーGCは中断され、フルGCがトリガーされ、理由の割り当て要求が失敗します。

この問題を解決するには、以下のパラメータを追加してこのチェックを無効にしてからシステムを正常に動作させてください。

-XXNurseryPartsLimits=0 
関連する問題