Srini,

> If the web server is 
> down, we feel that HttpClient is not cleaning up failed connections 
> properly and thats resulting in Memory Leaks at the server side.

As any other java application HttpClient is not in a position to dispose of any unused 
objects. This is the job of Java's garbage collection. Java application may only 
politely ask GC to clean up but there's no way of reliably forcing garbage collection.

This is how connect timeout is implemented (Odi, please correct me if I miss 
something):
* HttpClient attempts to open a socket
* if connect timeout is set to a positive value, a controller thread is started.
* the controller thread sleeps for the given number of milliseconds
* if the controller thread detects that there's still no connection upon after being 
awoken up, if simply nulls the reference to the socket object awaiting connection, and 
lets GC to eventually dispose of that object
* If GC keeps those objects alive for considerably long period of time, JVM may 
eventually run out of resources

Ways to mend the situation

(1) As Roland said please <strong>do reuse</strong> the HttpClient instance. 
HttpClient class is fully thread-safe. By no reusing HttpClient you completely defeat 
the connection keep-alive stuff 
(2) Use the trick suggested by Marcus
(3) If you do not want to lose the benefits of connection reuse you have two options:
  * do not use HttpClient#setConnectionTimeout and pray that default JVM connect 
timeout setting is sane
  * fork HttpClient and make HttpConnection use Socket#connect(SocketAddress, int) 
(available as of java 1.4) instead of older Socket#connect(InetAddress, int) + 
controller thread workaround

http://java.sun.com/j2se/1.4.2/docs/api/java/net/Socket.html#connect(java.net.SocketAddress,%20int)

Oleg

-----Original Message-----
From: Srinivas Vemula [mailto:[EMAIL PROTECTED]
Sent: Monday, February 02, 2004 11:57
To: Commons HttpClient Project
Subject: Re: Memory Leaks when web server hangs


Oleg,
   
    We are using JDK1.4.1 and connection time out is set to 30Ms and 
read time out to 60Ms. We are trying to connect to a IP Camera, and send 
a heart beat command to the camera to check for its availability every 
30 Secs from the time we find it is un available. If the web server is 
down, we feel that HttpClient is not cleaning up failed connections 
properly and thats resulting in Memory Leaks at the server side.

    The code we use is the standard way of using HttpClient and all the 
code is in a method and new HttpClient object is created for every 
request. Are there any ways to make sure the connections are all being 
purged properly? Are there any precautionary measures or flags we can 
set on HttpClient API when communicating with a web server (running on 
firm ware) with relatively less RAM and processing power (IpCamera with 
built in web server)?

Thanks for your time and help.
Srini

Kalnichevski, Oleg wrote:

>>Mike and Oleg, the stack trace Srini included indicates that HttpClient is
>>attempting to create a new timeout thread on every connection - does this
>>always occur or is it just one timeout thread per httpclient instance?  It
>>would be ideal if we could reduce this to one static thread as starting
>>threads is never nice for server side apps.  Not sure how feasible that is
>>though.
>>    
>>
>
>Hi Srini,
>HttpClient uses an additional controller thread to work around the limitation of 
>older (< 1.4) JDKs which do not provide a possibility to set connect timeout. If you 
>do not really need to control connect timeout (for instance, when communicating with 
>an intranet site with good availability) simply set connect timeout to. That will 
>prevent HttpClient from spawning an additional thread per request.
>
>Adrian, et al
>Another possibility to use reflection to set connect timeout using the Socket methods 
>when running in JVM 1.4 or above
>
>Oleg
>
>
>
>-----Original Message-----
>From: Adrian Sutton [mailto:[EMAIL PROTECTED]
>Sent: Monday, February 02, 2004 09:03
>To: Commons HttpClient Project
>Subject: Re: Memory Leaks when web server hangs
>
>
>On 2/2/04 2:00 PM, "Srinivas Vemula" <[EMAIL PROTECTED]> wrote:
>
>  
>
>>Hi All,
>>      We are seeing thread leaks when having client open connections to a web
>>server that hangs. Has any one seen this happening?? How do we ensure that the
>>library correctly closes  socket connections on failures, cleaning up system
>>resources, and  threads actually finish in  the timeout period and get freed
>>up. Would using MultiThreadedHttpConnectionManager
>><file:///D:/silkroad/http-commons/commons-httpclient-2.0-rc3/docs/threading.ht
>>ml#MultiThreadedHttpConnectionManager>   be of any help??
>>    
>>
>
>Hi Srini,
>If you're using the same HttpClient instance across multiple threads, you
>must use the MultiThreadedHttpConnectionManager or you'll run into strange
>problems.  If you're using separate HttpClient instances, you may as well
>stick with the single threaded (default) connection manager.
>
>In terms of connections hanging - you probably want to look into the
>setConnectionTimeout and setTimeout methods of the HttpClient class.  These
>allow you to control how long HttpClient waits when making a connection and
>how long it waits for data once the connection is established.  If you have
>set either of these to 0 (not sure what the default is, it may be platform
>specific) the connection will never timeout which sounds a lot like what
>you're seeing.
>
>Mike and Oleg, the stack trace Srini included indicates that HttpClient is
>attempting to create a new timeout thread on every connection - does this
>always occur or is it just one timeout thread per httpclient instance?  It
>would be ideal if we could reduce this to one static thread as starting
>threads is never nice for server side apps.  Not sure how feasible that is
>though.
>
>  
>
>>Srini
>>    
>>
>
>Regards,
>
>Adrian Sutton.
>
>----------------------------------------------
>Intencha "tomorrow's technology today"
>Ph: 38478913 0422236329
>Suite 8/29 Oatland Crescent
>Holland Park West 4121
>Australia QLD
>www.intencha.com
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>
>  
>

-- 
Srinivas Vemula                          +91 40 23547826- Ext 201
Associate Consultant                     +91 40 23541447 (Fax)
Mensamind                                +91 98497-42720 (Mobile)        
Hyderabad
India
http://www.mensamind.com

DISCLAIMER
The information contained in this e-mail is confidential and intended for the named 
recipient(s) only. If you are not an intended recipient of this email you must not 
copy, distribute or take any further action in reliance on it. You should delete it 
and notify the sender immediately.



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to