HttpClient(apache.DefaultHttpClient) オブジェクトのプール (GenericObjectPool) があります。HttpPost オブジェクトは、これらのクライアントを介して実行のために配置され、Post 要求が同時に送信される場合があります。使用されるプロトコルは、キープアライブを使用する HTTP/1.1 です。
netstat による負荷テスト中に、新しいソケット接続が無差別に作成され、古い接続が TIME_WAIT になることが観察されました。
ログの抜粋:-
[Worker-2] org.apache.http.impl.conn.Wire 63 - >> "POST /INBOX/4504a09e-13c0-3853-a285-9e2b9a22f65e/1e1e5a20-a8c1-11e2-99b8-7c19e9129271 HTTP/1.1[\r][\n]"
[Worker-2] org.apache.http.impl.conn.Wire 63 - >> "Content-Type: application/json; charset=UTF-8[\r][\n]"
[Worker-2] org.apache.http.impl.conn.Wire 63 - >> "Content-Length: 117[\r][\n]"
[Worker-2] org.apache.http.impl.conn.Wire 63 - >> "Host: rwcdtgxb0402:15010[\r][\n]"
[Worker-2] org.apache.http.impl.conn.Wire 63 - >> "Connection: Keep-Alive[\r][\n]"
[Worker-2] org.apache.http.impl.conn.Wire 63 - >> "User-Agent: Apache-HttpClient/4.2.1 (java 1.5)[\r][\n]"
[Worker-2] org.apache.http.impl.conn.Wire 63 - >> "[\r][\n]"
[Worker-2] org.apache.http.impl.conn.Wire 63 - << "HTTP/1.1 200 OK[\r][\n]"
[Worker-2] org.apache.http.impl.conn.Wire 63 - << "Content-Length: 0[\r][\n]"
[Worker-2] org.apache.http.impl.conn.Wire 63 - << "[\r][\n]"
[Worker-2] org.apache.http.impl.conn.DefaultClientConnection 254 - Receiving response: HTTP/1.1 200 OK
[Worker-2] org.apache.http.impl.conn.DefaultClientConnection 257 - << HTTP/1.1 200 OK
[Worker-2] org.apache.http.impl.conn.DefaultClientConnection 260 - << Content-Length: 0
[Worker-2] org.apache.http.impl.client.DefaultRequestDirector 540 - Connection can be kept alive indefinitely
**[Worker-2] org.apache.http.impl.conn.DefaultClientConnection 154 - Connection 0.0.0.0:51211<->192.168.88.172:15010 shut down**
[Worker-2] org.apache.http.impl.conn.BasicClientConnectionManager 189 - Releasing connection org.apache.http.impl.conn.ManagedClientConnectionImpl@12f65ce5
DefaultClientConnection.shutdown (接続 0.0.0.0:51210<->192.168.88.172:15010 シャットダウン) はクライアント側からの接続を閉じていますか? どのように呼び出されますか?サーバーからの応答 (200OK) を受信した後のコードでは、 httpPost.releaseConnection() はクライアント側のコードでのみ実行されます。
リクエストごとに接続を作成して TIME_WAIT に移行するのではなく、接続を ESTABLISHED 状態に維持して再利用するにはどうすればよいですか。
どんな助けでも大歓迎です。ありがとうございました。