1

JavaでDPLを使用しています。私は1GBのデータストアを持っています。1 秒間隔で同じレコードを読み取ろうとしている 5 つのスレッドを起動しています。最初の読み取り操作は、約 5 ~ 10 回のフェッチで約 15 ミリ秒かかり、その後 0 ミリ秒 (マイクロ秒) で安定し、10 ~ 20 回のフェッチの後、読み取り操作で 1 つのスパイク (15 ミリ秒) が発生します。

これの根本的な原因と、それを解決するための BDB の構成方法。

ありがとう

4

1 に答える 1

1

これは、アプリケーションのパフォーマンスに影響を与えるガベージ コレクターである可能性があります。次のコマンドで GC サイクルを監視してみてください。

jstat -gccause <pid-of-java-process> 200

スパイクと GC アクティビティの間に相関関係があるかどうかを確認します。Jstat は次の出力を提供します。

100.00   0.00   5.63  86.19  60.53    768    4.165    16    0.796    4.960 unknown GCCause      No GC               
  0.00  96.01   0.00  87.15  60.53    769    4.172    16    0.796    4.967 unknown GCCause      No GC               
  0.00  96.01  82.86  87.15  60.54    770    4.172    16    0.796    4.967 unknown GCCause      Allocation Failure  
 75.27   0.00  69.29  87.15  60.54    770    4.175    16    0.796    4.971 unknown GCCause      No GC               
  0.00  94.75  16.33  87.30  60.56    771    4.179    16    0.796    4.975 unknown GCCause      No GC               
 41.07   0.00   0.00  87.69  60.59    772    4.184    16    0.796    4.980 unknown GCCause      No GC   

これが表示Allocation failureされる場合、必要なメモリが原因でフル GC が開始されたことを意味します。

ところで、jstatJDK ディストリビューションの一部であるため、インストールする必要があります。

于 2011-04-24T03:35:30.973 に答える