hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jaikit Savla <jaikit.sa...@yahoo.com>
Subject Re: Httpclient 4.2.2 leak sockets ?
Date Wed, 10 Jul 2013 01:28:34 GMT
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 <jaikit.savla@yahoo.com> 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
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message