Resin から GlassFish v3.0.1 への Web アプリケーションの移行中に問題に直面しました。すでに回帰テスト中 (Selenium を使用) にハングし始めます。ブラウザには、ソースのない空のページが表示されます - メタもヘッドもボディもありません (Firefox および IE)。
Seleniumの問題だと思いました。しかし、問題は手動で再現され、IE8、FireFox 4、Chrome 6 でも再現されました。Windows と UBuntu 10.01 を含むさまざまなクライアント マシンが使用されました (したがって、ウイルス対策の影響は除外されます)。
事故の際、JMX 経由で jvisualvm を使用していくつかのスナップショット (THREAD および HEAP) を作成しました。スレッドを分析すると、サーバー ブラウザーが要求し、状態が "WAIT" になっているスレッドがサーバー上にあることがわかります。HEAP ダンプ (NetBeans で OQL を使用したクエリ) に存在しないオブジェクト インスタンス #123456 を待機しているモニター。
DBプールも調査しました(ファインロギングを有効にしてから、JMXモニターJDBC-POOL-MONを介して)。Oracle 11g エンタープライズは、DB のように使用されます。ドライバーは11.2.0.1gaを使用。JDK 1.6.0_21 x64 サーバー モード。JDBC プールの最大許容サイズ: 50 接続。JDBC の最大監視サイズは 10 (起動接続数) で、使用される接続のピークはわずか 7 でした。接続リークもアクティブ化されています。2 時間以上のリグレッション テストでは何も検出されませんでした。
HTTP スレッド プールでは 200 のスレッドが許可されますが、ピーク時には 181 のアクティブ スレッド、通常は 114 のデーモン スレッドでした。
Grizly は、静的テキスト キャッシングと gzip 圧縮を備えた WEB サービスのように使用されます。NIO がアクティブで、tcp 用に Java とネイティブ バッファの両方を試しました。
一部の友人は、Grizly を直接使用するのではなく、Apache Web サーバーを前に置いて mod_proxy を使用すると言いました。まだ試していませんが、Apache Web サーバーを使用せずに GlassFish v3 のみを使用したいと考えています。私はそれがより良いスロープットを示すことができることを願っています.
とにかく、この奇妙な動作の理由が何であるかはわかりません。どんなアイデアでも大いに役立ちます!
ps: 下の Resin アプリケーションは、同じ JDK と同じ DB で正常に動作し、ドライバーと同じリグレッション テストが使用されます。そして、生産においても、この種の問題はありません。
ありがとう、マックス。