GCを調整するときは、長期間にわたってGC統計を収集し、それに基づいて行動する必要があります。世代サイズのスナップショットは1つだけでは不十分です。
あなたがすべき:
フルGCロギングを有効にします。軽量でありながらパワフル。
- 使用する
-XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion
GCに関する情報を収集するための追加の手段を検討してください。ロギングは問題ありませんが、さらに多くの洞察を提供する軽量のコマンドラインツールが利用できる場合があります。例えば。jstat
エデン、サバイバー、オールドジェネレーションの職業/能力を表示するホットスポット用。
計算:
- ライブデータセット、割り当て率、およびプロモーション率。これにより、より大きなヒープが必要かどうか、またはたとえば 若い世代が小さすぎる、またはサバイバースペースが溢れている場合など。
- 総GC時間、総実行時間の5%未満である必要があります。このようにして、全体的なGC戦略がうまく機能しているかどうかを判断できます。
- PermGenの職業を観察する
このデータを取得したら、世代のサイズ設定を開始して、行った変更の影響を再度監視できます。スループットに関する通常の推奨サイズは次のとおりです。
- Old Gen = 1.5〜2倍のライブデータセット-データセットはOldGenスペースに快適に収まる必要があります。
- PermGen =通常のPermGenの職業の1.5倍。
- YoungGen =割り当て率に基づく。1秒間に割り当てる金額を確認してから、プロモーションレートを確認し、YoungGenを増やしてプロモーションレートを下げます。
- サバイバースペース=保有期間のしきい値と昇進率を監視します。
一般に、推奨されるサイズ設定は、チューニングの目標によって異なります。
- スループットの調整 -上記を参照してください。
- 低遅延チューニング-GCの一時停止を監視します
- 若いGCが長すぎる=>若い世代を減らす
- 若いGCの頻度が高すぎる=>若い世代を増やす
- フットプリントの調整-LiveDataSet、プロモーションレート、および割り当てレートに従ってサイズを調整します。スループットチューニングのように、スペースごとに余分なスペースを追加する必要がない場合があります
GCチューニングの質問も参照してください:GCの問題に関するクックブックガイドはありますか?