私は現在、非常に奇妙な問題に直面しています。私は、自己ホスト型の jetty コンテナー内で実行される単純なサーブレットを作成しました。このサーブレットは、JS スクリプトのロギング エンドポイントです。したがって、スクリプトは非常に単純なコードを実行して、graylog といくつかのファイル (log4j ファイル アペンダーによって管理されます) にログを記録します。
管理者は、サーブレットが最大 10.5 GB の仮想メモリを占有し、マシン全体の速度が低下していると不平を言いました。これは、他のいくつかの監視サービスのパフォーマンスに影響を与えました。
サーブレットを再起動すると問題は一時的に修正されましたが、問題は、このようなメモリの浪費を引き起こしているコード内のスポットをどのように見つけて修正できるかということです。
編集:-Xmx50m
スイッチでアプリケーションを起動します。
編集: 次のことが調査されました: Eclipse メモリ アナライザーと jConsole を起動して、いくつかの ruby スクリプトが要求を送信している間にアプリケーションを調べました。(1 分あたり 40 から 70 のリクエスト。これは、現時点でサーブレットが運用されている数を超えています。)
この設定では:
- ヒープサイズ: 4MB
- 実行中のスレッドの平均: 19 (ピークは 23)
- 仮想メモリ: 5GB
サーブレットを再起動すると、サーバーが高速化されました。サーブレットの疑わしいパラメータは、10.5GB の仮想メモリだけでした。