2

Java アプリケーションのメモリ パラメータを微調整しています。Eden スペースのサイズを最適な値に縮小することを計画しています。

若い世代の GC サイクルを生き延び、Tenured 世代に昇格した (若い世代で作成された) オブジェクトの割合を知りたいです。私のためにそれを行うことができるツールをお勧めしてもらえますか?

私の仮定では、現在、若い世代のサイズが x で、若い世代のサイクルを生き残ったオブジェクトの割合が y であり、若い世代を 5 GB から x-5 に減らすと、生き残ったオブジェクトの割合が若い世代のサイクルはまだ y に近いので、若い世代のサイズを安全に x-5 に減らすことができます。

同じ入力があれば教えてください。

ありがとう

4

3 に答える 3

1

サイジングエデン スペース:

  • Eden Space のサイズを決定するには、Allocation Rate ( Advanced JVM Tuningを参照)を計算する必要があります。
  • また、Total Young Generation -Xmnは、フル GC 後の OldGen スペース占有率の 1 倍から 1.5 倍にする必要があります (「Java パフォーマンス」に記載)。

サバイバースペースのサイジング:

  • 昇格率を監視する必要があるため(詳細な JVM チューニングを参照)、Survivor/Eden スペースを減らして FullGC の頻度が高くなりすぎないようにします。
  • -XX:+PrintTenuringDistributionは不可欠です。これによりTenuring Agesが表示されます。
  • -XX:SurvivorRatio=、実際に Survivor Sizes を調整するために必要になります-XX:TargetSurvivorRatio=-XXMaxTenuringThreshold=
  • 詳細については、 -XX:+PrintTenuringDistribution 出力のドキュメントのリクエストを参照してください。
于 2013-03-11T21:16:56.180 に答える
0

最近、これを正確に把握するためのテストを行っています。-gc パラメータを指定してjstatを使用し、その出力でスクリプトを使用して数値を取得しました。

通常、スクリプトは出力を調べ、Eden でガベージ コレクションが発生するたびに Eden 容量 (EC) を合計します。最後に、最初の Eden Used (EU) を差し引き、最後に EU を追加します。Tenured/Old スペースについても同じことが行われます。そして、Tenured に存続するオブジェクトのパーセンテージは、使用された Tenured Generation Space の合計を、使用された Eden Space の合計で割ったものです。

少しコーディングが必要ですが、後でこの種の分析を行う必要がある場合は、簡単に再利用できます。jstat を使用する場合、これを正しく行うには、マイナー ガベージ コレクションの間隔よりも短い間隔が必要であることに注意してください。

于 2013-03-12T08:41:13.410 に答える
0

私は jClarity が好きですが、これは商用ツールですが、試用期間があると思います。https://code.google.com/p/gclogviewer/などのオープン ソース プロジェクトも多数あります。

これらの gc ログ ビューアーを機能させるには、それらを指す GC ログが必要です。JVM の起動時に、コマンド ラインから次のルーン文字を JVM に渡します。PrintTenuringDistribution は、Tenuring プロセスについて通知する必要がある重要なビットです。

-Xloggc:gc.log 
-XX:+PrintGCDetails
-XX:+PrintTenuringDistribution
于 2013-03-11T13:47:23.290 に答える