4

の最適化された値を得るために必要な手順は何Xms/Xmx/XX:MaxPermSizeですか?

確かに大きな値を設定できますが、ご存じのとおり、GC は大きなメモリで時間がかかります。これらの値のテストと発見に時間を費やすことができる場合、一般的な推奨事項は何ですか?

たとえば、次の図は役に立ちますか?

Eden Space heap usage - 42MB / 62MB (used / committed)
Survivor Space heap usage - 8.5MB / 8.5MB (used / committed)
CMS Old Gen heap usage - 100MB / 217MB  (used / committed)
Non-heap memory pool usage - 36MB
4

3 に答える 3

4

GCを調整するときは、長期間にわたってGC統計を収集し、それに基づいて行動する必要があります。世代サイズのスナップショットは1つだけでは不十分です。

あなたがすべき:

  1. フルGCロギングを有効にします。軽量でありながらパワフル。

    • 使用する-XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion
  2. GCに関する情報を収集するための追加の手段を検討してください。ロギングは問題ありませんが、さらに多くの洞察を提供する軽量のコマンドラインツールが利用できる場合があります。例えば。jstatエデン、サバイバー、オールドジェネレーションの職業/能力を表示するホットスポット用。

  3. 計算:

    • ライブデータセット割り当て率、およびプロモーション率。これにより、より大きなヒープが必要かどうか、またはたとえば 若い世代が小さすぎる、またはサバイバースペースが溢れている場合など。
    • 総GC時間、総実行時間の5%未満である必要があります。このようにして、全体的なGC戦略がうまく機能しているかどうかを判断できます。
    • PermGenの職業を観察する

このデータを取得したら、世代のサイズ設定を開始して、行った変更の影響を再度監視できます。スループットに関する通常の推奨サイズは次のとおりです。

  • Old Gen = 1.5〜2倍のライブデータセット-データセットはOldGenスペースに快適に収まる必要があります。
  • PermGen =通常のPermGenの職業の1.5倍。
  • YoungGen =割り当て率に基づく。1秒間に割り当てる金額を確認してから、プロモーションレートを確認し、YoungGenを増やしてプロモーションレートを下げます。
  • サバイバースペース=保有期間のしきい値と昇進率を監視します。

一般に、推奨されるサイズ設定は、チューニングの目標によって異なります。

  • スループットの調整 -上記を参照してください。
  • 低遅延チューニング-GCの一時停止を監視します
    • 若いGCが長すぎる=>若い世代を減らす
    • 若いGCの頻度が高すぎる=>若い世代を増やす
  • フットプリントの調整-LiveDataSet、プロモーションレート、および割り当てレートに従ってサイズを調整します。スループットチューニングのように、スペースごとに余分なスペースを追加する必要がない場合があります

GCチューニングの質問も参照してください:GCの問題に関するクックブックガイドはありますか?

于 2013-01-09T18:12:05.450 に答える
1

これらの値を調整する必要があるまれなケースでは、jdk(binフォルダーだと思います)に含まれているJavaVisualVMというプログラムがあります。これは非常に便利です。実行中のVMに接続して、そのすべてのランタイムパラメーターを分析できます。

「プラグイン」セクションの下には、gcを監視するための非常に便利なプラグインがあり、そこで何が起こっているかを正確に確認できます。

于 2013-01-09T08:20:15.520 に答える
1

原則として、解決が必要な問題を発見するまでは、JVM メモリ設定を変更しないでください。JVM は、アプリケーションに合わせて実行時にほとんどのパラメーターを調整するのに非常に優れています。

メモリ パラメータを最適化する必要があることがわかった場合は、何を最適化する必要があるかによって異なります。使用する設定は、最適化する必要がある側面によって大きく異なります (たとえば、一時停止を最小限に抑えるための設定は、スループットを最大化するための設定とは大きく異なります)。

本当に最適化する必要がある場合は、どの側面を最適化する必要があるかについて、より多くの情報を提供してください。

于 2013-01-09T13:11:43.210 に答える