On Fri, 2008-06-27 at 11:25 -0700, Ken DeLong wrote: > All of our connections are to the exact same host - in fact, the sending and > receiving processes are on the same actual server. The same dns name is used > for each request (we use the dns name of the machine, not the string > "localhost"). >
Ken, Try disabling the stale connection check. It can happen, especially with TLS/SSL, that perfectly good connections are reported as stale. You can get a better insight as to why connections get dropped by turning on the context logging. For details see http://hc.apache.org/httpclient-3.x/logging.html Oleg > We'll try the multithreaded connection manager next. (I was pretty sure the > calling app was single threaded but I'm not 100% sure). > > Thanks! > Ken > > > -----Original Message----- > From: Oleg Kalnichevski [mailto:[EMAIL PROTECTED] > Sent: Friday, June 27, 2008 11:20 AM > To: HttpClient User Discussion > Subject: RE: Too Many Connections > > 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: httpclient-users@hc.apache.org > > 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] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]