スレッドを呼び出してサーブレットをヒットし、サーバーのログから最後の数行を取得し、取得したログ行をクライアントに表示する Java クライアントがあります。ときどき、ログ スレッドがタイムアウトします。アプリケーション サーバーは Tomcat ですが、Tomcat と Websphere の両方で、Windows 上のクライアントと Windows 上のサーバーでエラーが断続的に再現されます。Windows 上のクライアントと AIX 上のサーバーでは、この問題は現在まで発生していません。コードはかなりの数の繰り返しで安定していましたが、突然これらの問題が発生し始めたことに言及する必要があります。
これまでに試したこと
ログ読み取りクライアントは、0.1 秒ごとにスレッドを呼び出します (スリープを使用)。コードでスリープ時間を 5 秒に増やしてみましたが、役に立ちませんでした。
URLConnection オブジェクトを作成するときに、connectTimeout や readTimeout などのプロパティを設定します。Socket 例外がスローされるため、readTimeout が原因になるとは思いません。
3 Tomcat の設定で作業してみました。
Connector port="9962" protocol="HTTP/1.1" connectionTimeout="200000" redirectPort="8445" acceptCount="30"
4 . 使用後、URL 接続が「切断」されます。
5 スタック トレースは、要求がアプリケーション サーバーに到達しなかったことを示しているようです。これは、接続に対する OS レイヤーの制限が原因である可能性があります。しかし、その場合、Windows のイベント ビューアーにエントリがあったはずです。
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
この問題をどのように診断しますか? サーバー ログには疑わしいものは何も表示されません。私の知る限り、クライアントとサーバーには他のネットワーク デバイスがないため、プロキシは必要なく、ファイアウォールはオフになっています。これまでキープアライブを使用していません。