1

私たちのシステムでは、約 25 秒の定数に達するまで、ガベージ コレクション時間が直線的に上昇し続けるというガベージ コレクションの問題があります。

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
  0.00  84.18  76.65  35.47  60.16    441   15.581    16    1.834   17.415
 75.72   0.00  97.32  35.47  60.16    442   15.770    16    1.834   17.604
  0.00  64.69  35.56  35.86  60.16    443   16.318    16    1.834   18.153
100.00   0.00  19.91  35.87  60.16    444   16.381    16    1.834   18.215
  0.00  70.61  40.85  36.82  60.17    445   17.488    16    1.834   19.322
 28.80   0.00  19.61  36.82  60.17    446   17.535    16    1.834   19.369
 34.51   0.00  48.01  36.82  60.18    448   17.561    16    1.834   19.395
  0.00  10.86  20.48  37.11  60.21    453   17.979    16    1.834   19.813
  9.04   0.00  47.39  37.12  60.23    454   18.063    16    1.834   19.898
  0.00  71.26   2.65  37.14  60.23    455   18.173    16    1.834   20.007
 63.64   0.00  90.91  38.04  60.23    456   19.562    16    1.834   21.396
  0.00  76.45  42.70  38.04  60.23    457   19.592    16    1.834   21.426

これは、ちょっとした負荷テストを実行したときのアクティビティのスナップショットです。

私は専門家ではありませんが、いくつかのスナップショットを確認しましたが、実際にいくつかのメモリの問題が見つかりました。明らかなものは現在解決されています。

マシンには次の設定があります

JAVA_OPTS="$JAVA_OPTS 
-server 
-Xms704m 
-Xmx704m 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=/var/log/tomcat6 
-XX:MaxPermSize=192m 
-XX:+UseConcMarkSweepGC 
-XX:+CMSIncrementalMode 
-XX:+CMSIncrementalPacing 
-XX:+DisableExplicitGC
" 

Java 6、Tomcat6、Spring Framework、Hibernate、EHCache をキャッシングに使用し、Quartz をさまざまなスケジューリング タスクに使用します。この項目のリンクは実際に、MAT が潜在的なメモリ リークを報告する原因となったいくつかの問題を解決するのに役立ちましたが、現在はそうではありません。

テスト ボックスであらゆる種類の JVM 設定を試してみましたが、すべてのケースでガベージ コレクション時間が容認できないレベルまで増加し続けました。最初は、オブジェクト グラフをキャッシュし、Hibernate Second Level キャッシュだけを使用していないため、キャッシュが原因だと考えていました。しかし、MAT でのキャッシュのメモリ使用量は、約 18Mbs のサイズでそれほど過剰に見えませんでした。

これはメモリリークですか、それともメモリを追加する必要がありますか? メモリ リークの場合、MAT で最適にデバッグするにはどうすればよいですか?

4

2 に答える 2

1

私の理解では、これは絶対に正常です。YGCT 列は、JVM の起動以降のすべての YGC アクションの合計を報告します。もちろんFGCTやGCTも同様です。

しばらくしてパフォーマンスが低下したことに気付きますか、それとも純粋に科学的な問題ですか?

于 2012-06-27T13:01:06.397 に答える
0

YGC YGCT FGC FGCT GCT は、累積されるため、時間の経過とともにすべて増加します。あなたが興味を持つべきは違いです。

十分な速度で監視していないか、頻繁に GC を実行しています。あまり違いがないように見えるまで、メモリの量を増やしてみます。たとえば、私は通常、6 GB の Eden スペースを持つ 8 GB のヒープから始めますが、別のものを好むかもしれません。

于 2012-06-27T13:14:18.743 に答える