2012-04-25 7 views
0

これは少し複雑であり、可能な他のStackExchangeサイトに属しています。Tomcatプロセスが他のプロセスを再バインドからポートン再起動にブロックします。

Tomcat Webアプリケーションと「監査」アプリケーションがあります。監査アプリケーションは独自のプロセスで実行され、ポート60000からHTTP要求を待ち受けます。通常の状態では、TomcatはHTTP経由で監査データを監査プロセスに送信します。両方のプロセスは同じホスト上で実行されます。

システムはCentOS 5.7、Tomcatはバージョン6.0.33です。監査アプリケーションはFlumeエージェントです。

場合によっては、監査アプリケーションを再起動する必要があります。そうすると、通常は成功します。

監査アプリケーションが再起動すると、ポート60000でBindExceptionが発生して失敗することがあります。監査アプリケーションを停止し、実際に停止してから再起動しますが、失敗します一貫してこの問題を解決する唯一の方法は、Tomcatサーバーを再起動することです。何らかの理由で、監査アプリケーションがポート60000でリッスンするのをブロックしています。

監査アプリケーションがダウンしているときに "lsof"ポート60000、我々が得る:60000、時折ポート60000

ウェブアプリを聞いてから、他のアプリケーションをブロックしている:

java  13178 tomcat 47u  IPv6  34165085   TCP <hostname>:60000-><hostname>:60000 (ESTABLISHED) 

は、私たちは本当に唯一のローカルホストに書き込み、このTomcatプロセスは、どのように理解することはできません関連している可能性がある場合は、Javaに組み込まれているデフォルトのHTTP接続キャッシュを使用しています。

+0

これは、fin_wait_2にタイムアウトしないことに関連している可能性があります。これを小さな値に設定してみてください。 netstatは何を示していますか? – jontro

+0

@jontroおっと、いいえ、私は再びその状態になるまで待つ必要があります。最後のコメントを無視する(削除されました) –

+0

@ThomasAndrews Tomcatのアプリがどのようにデータを送信するのですか?ポート60000へのソケットを開きますか? –

答えて

1

私は、ポート60000が「エフェメラルポート」1の範囲内にあることが関係していると推測しています。おそらく、あなたのTomcat Webappが何らかの理由で時々ポート60000をつかんで、別のアプリケーションがポートにバインドされないようにしています。おそらく、監査サーバーの短命範囲にないポートを使用しようとしますか?

+0

ええ、私はこの可能性を考えましたが、これが起こっているメカニズムを見ることができなかったので、試してみませんでした。私が試してみたいことのリストが上がっています。 –

+0

これは、ポート60000でリスニングするこの問題を再現できましたが、エフェメラル範囲外のポートでは再現できませんでした。 –

関連する問題