2

ヒープが完全に使用されていない場合でも、フル GC が繰り返されます。

GCログは次のようになります: http://d.pr/i/iFug (青い線は使用されたヒープで、灰色の四角形はフル GC です)。

この質問に投稿されたものと同様の問題のようです:ヒープが空の頻繁なフル GC

ただし、そのスレッドは問題に対する実際の回答を提供しませんでした。私のアプリケーションは RMI を使用しており、GC 間隔を 1 分から 1 時間に増やしたアップグレード 45 の前に、本番サーバーは実際に 1.6 を使用しています ( http://docs.oracle.com/javase/7/docs/technotes/guides/rmi /relnotes.html )。ただし、ログの残りの部分からは、Full-GC-ever-1-min パターンはわかりません。

これを引き起こしている可能性があるのは何ですか?

4

2 に答える 2

1

最も可能性の高い原因は、ヒープの現在のサイズに達したことです。ヒープのサイズは、設定した最大値より小さく、プログラムの実行時に調整されます。

たとえば、最大 1 GB を設定するとします。最初のヒープ サイズは 256 MB で、256 MB に達するとフル GC を実行し、この GC の後、400 MB がより適切なサイズであると判断し、これに達すると、フル GC が実行されるなど。


Tenured スペースがいっぱいになるか、空きスペースが見つからない場合は、メジャー コレクションを取得します。たとえば、断片化されている場合。

サバイバー スペースが小さすぎる場合は、完全なコレクションも得られます。

つまり、最も可能性の高い原因は、使用した GC チューニング パラメータです。システムが期待どおりに動作するまで、チューニング パラメーターを単純化することをお勧めします。

于 2013-09-26T18:35:41.603 に答える
0

リンクされたスレッドに記載されているように、明示的な GC を無効にして、FullGC パターンが再び発生するかどうかを確認してください: -XX:+DisableExplicitGC. RMI コードは、特定の間隔で明示的な GC をトリガーしている可能性がありますが、これは場合によっては望ましくない可能性があります。

それでも FullGC が発生する場合は、問題を分析するためにスレッド ダンプと場合によってはヒープ ダンプを取得します。

また、jstatEden、Survivor、OldGen スペースの占有を確認するために使用します。

于 2013-09-26T18:42:04.383 に答える