15

Java 6、Tomcat 6、Spring Framework 3、Hibernate 4、EhCache を実行する Web アプリケーションがあります。ガベージ コレクションに 30 秒以上かかるという非常に長い時間がかかり、アプリケーションが応答しなくなるという問題があります。

現在テスト中ですが、メモリを追加するという明らかなことは別として、ガベージ コレクションの時間を短縮するために調整できる側面があるかどうか疑問に思っていました。

積極的にキャッシュしているため、メモリ使用量の主な原因は EHCache です。しかし、私は常に EHCache ストアのサイズを決めるのが難しいと感じています (新しい EhCache バイト サイズ ストアは、キャッシュされたオブジェクト グラフが非常に大きくなる可能性があるため、あらゆる種類の問題を引き起こします)。

これらはJVMの私の設定です

JAVA_OPTS="$JAVA_OPTS -server -Xms256m -Xmx704m XX:OnOutOfMemoryError=/usr/share/scripts/on_server_crash.sh -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat6 -XX:MaxPermSize=192m -XX:+UseConcMarkSweepGC
4

2 に答える 2

4

GC 時間を短縮するためにできる最善の方法は、オフ ヒープ メモリを使用することです。大量のデータをできるだけ多く移動できれば、数百 MB のオフ ヒープ メモリがあっても、完全な GC 時間を 10 ミリ秒まで短縮できます。Ehcache はオフ ヒープ データ ストアをサポートしていると思いますが、サポートしていない場合、または使用できない場合は、サポートしている代替手段を検討することをお勧めします。

最大メモリ サイズが 700 MB しかない場合、メモリが非常に限られているサーバーで実行しているように見えます。それ以外の場合は、最大 8 GB または 16 GB から始めて、本当に必要ないと思われる場合はメモリ サイズを減らすことをお勧めします。

于 2012-06-24T17:41:48.900 に答える
1

FourSquare の人々からの優れたツールがあります。このリンクと彼らが持っている簡単な例を確認してください。フォースクエア ヒープ ツール。. 上記のツールのいずれかで見つけた診断に基づいて、問題を解決するための最も分類された解決策は、RAM を追加するか、CPU プロセッサに電力を追加することです。インフラストラクチャの変更を受け入れる場合は、Azul Systems の Zing を確認してください。しかし、2番目のオプションはストレッチかもしれないと思います.

于 2012-06-24T22:54:49.840 に答える