Mavenでjettyサーバーを使用してWebアプリケーションを実行しています。このアプリケーションには、リストとマップに静的オブジェクトの大きなプールが含まれており、2.8GBの物理メモリ使用量に貢献しています。数時間後、サーバーは最大CPU使用率でハングします。これは、サーバー上でユーザーの操作や要求が行われなくても発生します。
この数時間の間に、サーバーが正常に動作している間に、メモリがゆっくりと1.7GBに減少することに気づきました。私の疑いは、これがガベージコレクション関連の問題である可能性があるということです。
質問:
- ラージオブジェクトプールとその参照を誤って収集または検査しているときにGCがハングする可能性がありますか?
- この問題をデバッグして修正するにはどうすればよいですか?
Windowsではこの問題は発生しないことに注意してください。アプリケーションが起動してプールがいっぱいになると、3.4 GBを占有し、クラッシュすることなくまったく同じ状態を保ちます。
サーバーの起動と環境:
setenforce 0
export MAVEN_OPTS="-Xmx5120m -Xms5120m -XX:+UseConcMarkSweepGC -Xgcthreads1 -XX:MaxGCPauseMillis=2000 -XX:GCTimeRatio=10"
sudo nohup mvn -D jetty.port=80 jetty:run &
オペレーティング·システム:
Ubuntu 12.04.1 LTS
Java:
OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~12.04.1)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
Maven:
Apache Maven 3.0.4
桟橋:
8.1.8.v20121106