私たちのシステムでは、約 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 で最適にデバッグするにはどうすればよいですか?