I tried to reproduce CLOSE_WAIT scenario on client side - but was not able to
reproduce using HttpClient. However I was able to reproduce using basic sockets.
Basic socket:
SERVER:
Socket socket = new ServerSocket(12000).accept();
OutputStream out = socket.getOutputStream();
out.write("HTTP/1.1 200 OK\n\nWorkerRunnable\n".getBytes());
out.flush();
out.close();
CLIENT:
Socket socket = new Socket(InetAddress.getByName("localhost"), 12000);
InputStream in = socket.getInputStream();
int c;
while ((c = in.read()) != -1)
{
System.out.write(c);
}
System.out.flush();
// should now be in CLOSE_WAIT
Thread.sleep(Integer.MAX_VALUE); // After this sleep - client goes
into CLOSE_WAIT state
But when I replace the client with HTTP Post request
HTTPCLIENT:
HttpClientFactory factory = new HttpClientFactory();
HttpClient httpclient = factory.getHttpClient(config);
final String url = "http://localhost:12000";
HttpPost postMethod = new HttpPost(url);
postMethod.addHeader("Content-Type", "application/json");
postMethod.setEntity(new ByteArrayEntity("{\"name\" :
\"jaikit\"".getBytes()));
HttpResponse response = httpclient.execute(postMethod);
InputStream lsgInputStream = response.getEntity().getContent();
int c;
while ((c = lsgInputStream.read()) != -1)
{
System.out.write(c);
}
Here - as soon as I close the socket on server - the entire connection gets
closed and netstat does not show any trace of it.
Any suggestions ?
On Tuesday, July 9, 2013 11:13 AM, Jaikit Savla <[email protected]> wrote:
Hello Users,
I am using PoolingClientConnectionManager for my HttpClient instance and have
set 512 connections per route. On one of my production box, all 512 connections
are in CLOSE_WAIT state. I also have IdleConnectionMonitorThread running which
claims Idle connections (30s) and expired connections. I verified that the
thread is running on my jstack. However it is not reclaiming the 512
connections for last 5 days.
Has anyone encountered similar issue ? have any clue on how to debug ?
I have simulating the CLOSE_WAIT scenario in my unit test and verifying if
IdleConnectionMonitorThread is reclaiming the idle connections.
Ref:
http://stackoverflow.com/questions/4724193/how-can-i-ensure-that-my-httpclient-4-1-does-not-leak-sockets
Any pointers on how to debug this is appreciated.
Thanks,
Jaikit