2017-02-26 9 views
1

WebアプリケーションでHttpClient(バージョン4.5.2)に問題があります。つまり、マルチスレッドの方法で問題が発生しています。通常の状況では、接続要求が到着すると、プールからリースされた接続が使用され、最後にプールに戻され、次の要求として再び使用されます。私は上記の通常の方法で述べた接続(ID 673890)を数回使用した後HttpClientでの接続が予期せず終了する

15 Feb 2017 018:25:54:115 p-1-thread-121 DEBUG PoolingHttpClientConnectionManager:249 - Connection request: [route: {}->http://127.0.0.1:8080][total kept alive: 51; route allocated: 4 of 100; total allocated: 92 of 500] 
15 Feb 2017 018:25:54:116 p-1-thread-121 DEBUG PoolingHttpClientConnectionManager:282 - Connection leased: [id: 673890][route: {}->http://127.0.0.1:8080][total kept alive: 51; route allocated: 4 of 100; total allocated: 92 of 500] 
15 Feb 2017 018:25:54:116 p-1-thread-121 DEBUG DefaultManagedHttpClientConnection:90 - http-outgoing-673890: set socket timeout to 9000 
15 Feb 2017 018:25:54:120 p-1-thread-121 DEBUG PoolingHttpClientConnectionManager:314 - Connection [id: 673890][route: {}->http://127.0.0.1:8080] can be kept alive for 10.0 seconds 
15 Feb 2017 018:25:54:121 p-1-thread-121 DEBUG PoolingHttpClientConnectionManager:320 - Connection released: [id: 673890][route: {}->http://127.0.0.1:8080][total kept alive: 55; route allocated: 4 of 100; total allocated: 92 of 500] 

、私は、次のコードで発生に気づく:

15 Feb 2017 018:25:54:130 p-1-thread-126 DEBUG PoolingHttpClientConnectionManager:249 - Connection request: [route: {}->http://127.0.0.1:8080][total kept alive: 55; route allocated: 4 of 100; total allocated: 92 of 500] 
15 Feb 2017 018:25:54:130 p-1-thread-126 DEBUG PoolingHttpClientConnectionManager:282 - Connection leased: [id: 673890][route: {}->http://127.0.0.1:8080][total kept alive: 54; route allocated: 4 of 100; total allocated: 92 of 500] 
15 Feb 2017 018:25:54:131 p-1-thread-126 DEBUG DefaultManagedHttpClientConnection:90 - http-outgoing-673890: set socket timeout to 9000 
15 Feb 2017 018:25:54:133 p-1-thread-126 DEBUG DefaultManagedHttpClientConnection:81 - http-outgoing-673890: Close connection 
15 Feb 2017 018:25:54:133 p-1-thread-126 DEBUG PoolingHttpClientConnectionManager:320 - Connection released: [id: 673890][route: {}->http://127.0.0.1:8080][total kept alive: 55; route allocated: 3 of 100; total allocated: 91 of 500] 

ログが接続であることを言いますリースされ、使用され、閉じられ、プールに戻されます。だから、私の質問は、なぜ接続が閉じられているということですか?そしてなぜそれが閉鎖の後にプールに解放されるのですか?

私は、接続がサーバーによって閉じられる可能性があることを知っていますが、それは別の状況です。その場合、接続はプールからリースされ、古いと判断されるため、新しい接続が確立されて使用されますが、上で示したログは異なる動作を示します。

HttpClientで接続を閉じる2つの理由がわかりました。最初に、KeepAliveTimeが期限切れになってアイドル状態になったために閉じられました。第2に、サーバによって閉じられ、プール内で接続が古くなります。接続を閉じるその他の理由はありますか?

答えて

0

HttpClientメーリングリストのOleg Kalnichevskiの返答と、私が作った試験に基づいて、問題は、もう一方の手で送信された「Connection:close」ヘッダーのためであることが判明しました。同じ状況につながる別の原因は、HTTP/1.0非永続接続を使用することです。

関連する問題