On Fri, 2008-06-27 at 09:08 -0700, Ken DeLong wrote:
> That didn't help.  We changed to  
> 
>       private HttpClient client = new HttpClient(new
> SimpleHttpConnectionManager());
> 

Ken,

SimpleHttpConnectionManager re-uses the underlying connection object
but it cannot reuse the network socket when connecting to a different
host. Ii needs to close the old socket and open a new one every time it
connects to a different host. If you would like to keep alive
connections to multiple hosts, consider
using MultiThreadedHttpConnectionManager

Regarding connections in TIME_WAIT state please see

http://wiki.apache.org/HttpComponents/FrequentlyAskedConnectionManagementQuestions

Oleg


> But we still see the same behavior.
> 
> Turning on the debug logs shows messages like 
> 
> $ fgrep 'Connection is locked.  Call to releaseConnection() ignored.'
> server.log | wc -l
> 176
> 
> $ fgrep 'Releasing connection back to connection manager.' server.log |
> wc -l
> 264
> 
> 
> What would cause the connection to be locked when releaseConnection() is
> called?
> 
> 
> 
> -----Original Message-----
> From: Pete Keyes [mailto:[EMAIL PROTECTED] 
> Sent: Thursday, June 26, 2008 3:27 PM
> To: HttpClient User Discussion
> Cc: Stephen Hiley
> Subject: RE: Too Many Connections
> 
> You need to use either of these:
>   - org.apache.commons.httpclient.MultiThreadedHttpConnectionManager
>   - org.apache.commons.httpclient.SimpleHttpConnectionManager
> There are examples of both in the HttpClient site.
> 
> In addition to that you may need to tune the O/S to formally release the
> CLOSE_WAIT files sooner.  There is a delay between when an application
> closes a socket and when the O/S can formally release that socket to
> avoid orphan packets.
> 
> See the documentation for your O/S on setting that value.
> 
>  
> ...Pete
> Starbucks Coffee Co.
> 2601 Utah Ave S.
> Seattle, WA. 98134
> (w) 206-318-5933
> (c) 206-914-4134
> 
> -----Original Message-----
> From: Ken DeLong [mailto:[EMAIL PROTECTED]
> Sent: Thursday, June 26, 2008 3:17 PM
> To: [email protected]
> Cc: Stephen Hiley
> Subject: Too Many Connections
> 
> We have a method in our app that calls httpclient like this:
> 
>       private HttpClient client = new HttpClient();
>       
>       public String send(String urlString, String xml)
>       {
>               PostMethod postMethod = new PostMethod(urlString);
>               
>               // Put the XML in the request
>               try
>               {
>                       RequestEntity entity = new
> StringRequestEntity(xml, "text/xml", "UTF-8");
>                       postMethod.setRequestEntity(entity);
>               }
>               catch(UnsupportedEncodingException e1)
>               {
>                       logger.warn("Couldn't encode the xml?", e1);
>                       return "" +
> IContentPublishingService.ACTION_ERROR;
>               }
> 
>               // Send the data and get the response
>               String response = null;
>               try
>               {
>                       client.executeMethod(postMethod);
>                       byte[] responseBody =
> postMethod.getResponseBody();
>                       response = new String(responseBody);
>               }
>               catch(HttpException e)
>               {
>                       logger.warn("Fatal protocol violation: " +
> e.getMessage());
>                       return "" +
> IContentPublishingService.ACTION_ERROR;               
>               }
>               catch(IOException e)
>               {
>                       logger.warn("Fatal transport error: " +
> e.getMessage());
>                       return "" +
> IContentPublishingService.ACTION_ERROR;
>               }
>               finally
>               {
>                       // Release the connection.
>                       postMethod.releaseConnection();
>               }
> 
>               return response;
>       }
> 
> 
> This method is called rapidly by a single thread in our application.
> After 1500 calls or so, we start to see java.net.SocketException, too
> many open files.  Netstat reveals that there are many sockets in
> CLOSE_WAIT and TIME_WAIT states.  It seems that httpclient is not
> reusing the connection managed by the HttpClient instance, and instead
> is closing the connection and creating a new one.  This appears to be in
> conflict with all the documentation that we could find.
> 
> An interesting wrinkle is that the sending and receiving side of the
> connection are both on the same machine.  The URL is constructed using
> the machine's dns name, not "localhost".
> 
> ------------------------------------------------------------------------
> --
> Kenneth DeLong
> Software Architect
> Engineering
> BabyCenter, LLC
> 
> [EMAIL PROTECTED]
> p:  415.344.7616
> AIM: kenwdelong
> 
> http://www.babycenter.com
> 
> 
> 
> This email message is for the sole use of the intended recipient(s) and
> may contain confidential and privileged information. Any unauthorized
> review, use, disclosure or distribution is prohibited. If you are not
> the intended recipient, please contact the sender by reply email and
> destroy all copies of the original message. If you are the intended
> recipient, please be advised that the content of this message is subject
> to access, review and disclosure by the sender's Email System
> Administrator.
> 
> 
> ---------------------------------------------------------------------
> 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]
> 


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

Reply via email to