hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oleg Kalnichevski <ol...@apache.org>
Subject Re: question on idle connections
Date Sat, 22 Nov 2014 09:52:04 GMT
On Fri, 2014-11-21 at 21:00 +0000, Jaikit Savla wrote:
> Closing Idle and Expired connection is application only when stream associated with Connection
is closed, otherwise connections are not considered idle. Looks like there is leak in connections
at your side. Below code snippet shows one example on how to close the stream in a guaranteed
fashion.
>         HttpResponse response = httpClient.execute(httpGet);        HttpEntity entity
= response.getEntity();        String jsonString = null;        try {            InputStream
instream = entity.getContent();            
>             /* do your processing with the stream */        } finally {            EntityUtils.consumeQuietly(entity);
       }
> Jaikit 
> 
>      On Friday, November 21, 2014 12:48 PM, Sam Perman <sam@permans.com> wrote:
>    
> 

Jaikit is absolutely right. This section of the HttpClient tutorial may
also be of help:

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html#d5e145

Oleg

>  Hello
> 
> We have had a persistent issue in production where after a few days our
> PoolingClientConnectionManager becomes unusable because there are no
> available connections. It turns out all of the available connections are
> “leased” (according to the PoolStats).
> 
> I thought I was doing the right thing by writing an
> IdleConnectionManagerThread as recommended in the docs. This thread will
> call “closeExpiredConnections” and “closeIdleConnections” on a regular
> interval.
> 
> Looking at the implementation of AbstractConnPool.closeExpired and
> AbstractConnPool.closeIdle I don’t understand how they work. In our case,
> all of our connections are “leased”… but these methods only ever iterate
> and close connections that are “available”. How do I clean up leased
> connections?
> 
>             Iterator<E> it = this.*available*.iterator();
>             while (it.hasNext()) {
>                 E entry = it.next();
>                 if (entry.getUpdated() <= deadline) {
>                     entry.close();
>                     RouteSpecificPool<T, C, E> pool = getPool(entry.getRoute());
>                     pool.remove(entry);
>                     it.remove();
>                     notifyPending(pool);
>                 }
>             }
> 
> thanks
> sam
> ​
> 
>    



---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Mime
View raw message