3

Java アプリケーションのメモリ生成プール サイズを調整したいと考えています。これを行うには、まずヒープがどのように使用されるかを理解する必要があります。本質的に、JVM ヒープ内のすべてのオブジェクトの数、サイズ、および有効期間を知る必要があります。このデータを収集した後、若い世代と在職期間中の世代のプールにより適したサイズを見つけることができるはずです。

Sun/Oracle のホワイトペーパー「Tuning Garbage Collection with the 5.0 JVM」に記載されている情報に基づいてチューニングを行っています。セクション 3 ( http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html#1.1.%20Generations%7Coutline ) では、世代のサイジングについて説明し、オブジェクトの有効期間グラフの例を示します。アプリケーションで達成しようとしているものとほぼ同じです。

これまでのところ、特定のクラスのインスタンス数とそれぞれのサイズをメモリに記録できました。ただし、インスタンスの平均寿命を抽出する方法が見つかりません。現在、jProfiler を検討していますが、これまでのところ成功していません。

Java アプリケーションのオブジェクトの平均寿命のグラフ化に成功した人はいますか?

4

1 に答える 1

2

GC を調整するには、通常、すべてのオブジェクトの有効期間は必要ありませんが、プールのリアルタイムの概要が必要です。私が通常最初に行うことは、jvmstat (http://java.sun.com/performance/jvmstat/) の一部である visualgc を使用してさまざまなプールを調べることです。次に、メモリ リークの可能性をチェックします。これは私が出会った中で最高の方法です。

A. jconsole では、時期尚早に古い世代に常にオーバーフローしているかどうかを確認できます (つまり、eden が大きすぎて gc の後でもサバイバーに収まりません)。このような場合は、若いサイズと生存率を確認し、オーバーフローしないように調整してみてください。

B. また、「通常の」操作中には、visualgc で生存世代のヒストグラムを見て、世代が古くなりすぎる前に空であることを確認することをお勧めします。

このようにオーバーフローすると、メモリ リークが発生する可能性があります。次に、jconsole でメモリをダンプし、MAT (http://www.eclipse.org/mat/) で確認します。

  1. jconsole.exe を起動し、HotSpotDiagnostic MBean でオペレーション dumpHeap() を呼び出します (ファイル名が .hprof で終わることを確認してください)。
  2. MAP でダンプを開き、予想よりも多くのスペースを占有しているタイプのオブジェクトを認識するかどうかを確認します。

幸運を。

于 2011-07-17T10:22:52.593 に答える