0

これは少し複雑で、他の StackExchange サイトに属している可能性があります。

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

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

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

しかし、監査アプリケーションを再起動すると、ポート 60000 で BindException が発生して失敗することがよくあります。この問題を解決する唯一の方法は、Tomcat サーバーを再起動することです。どういうわけか、監査アプリケーションがポート 60000 でリッスンするのをブロックしています。

監査アプリがダウンしているときに「lsof」を実行し、ポート 60000 でデータを探すと、次のようになります。

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

localhost:60000 にのみ書き込みを行うこの Tomcat プロセスが、他のアプリケーションがポート 60000 をリッスンするのをときどきブロックしている理由がよくわかりません。

関連する可能性がある場合、Web アプリは Java に組み込まれているデフォルトの HTTP 接続キャッシュを使用しています。

4

1 に答える 1

1

ポート60000が「エフェメラルポート」1の範囲にあることに関係していると思います。おそらく、Tomcat Webappは、別のアプリがポートにバインドできないように、ポート60000を取得していることがあります。監査サーバーの一時的な範囲にないポートを使用してみてください。

于 2012-04-25T15:44:26.207 に答える