[ https://issues.apache.org/jira/browse/AXIS2-2593?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12492714 ]
Michele Mazzucco commented on AXIS2-2593: ----------------------------------------- According to [1] HttpClient uses persistent connections (i.e. multiple http requests use the same socket) by default, then it should not be possible to have > 1000 open connections (the tuning parameters on windows are just a workaround, as David correctly pointed out). [2] explains that there's a 1:1 ratio between HttpConnection(s) and open sockets, so I guess the problem is that when a ServiceClient is reused every few send operations a new connection is created. A quick look to the code does not reveal any problem: the CommonsHTTPTransportSender class simply creates a new HttpSender in writeMessageWithCommons(), but then the client is correctly reused, if available (see AbstractHTTPSender.getHttpClient()). Instead previous posts like [3] seems to indicate that even the HttpClient is reused, every few requests a new connection is opened. [1] http://jakarta.apache.org/commons/httpclient/performance.html#Connection_persistence [2] http://www.innovation.ch/java/HTTPClient/advanced_info.html#conn_details [3] http://www.nabble.com/Apache-Axis-2%3A-how-to-get-header--Options-tf3604648.html#a10086555 > Web Service request loop causes many TIME_WAIT Connections & "BindException: > Address already in use: connect" > ------------------------------------------------------------------------------------------------------------- > > Key: AXIS2-2593 > URL: https://issues.apache.org/jira/browse/AXIS2-2593 > Project: Axis 2.0 (Axis2) > Issue Type: Bug > Affects Versions: 1.1.1, nightly > Environment: Windows XP, Tomcat, Axis2 nightly build (also > encountered in 1.1.1), JiBX 1.1.3, Microsoft Windows XP [Version 5.1.2600], > 126 GB free disk space, 1GB RAM. > Reporter: David Bueche > Priority: Critical > > I am performing the following: > - Executing a tight loop calling a singel web service > - Using the same Stub over and over > - Creating the Stub with a custom ConfigurationContext (see below) > - Sending cleanup() to Stub after each message sent (although problem existed > even before cleanup() was added) > After approximately 4000 messages have been sent, an AxisFault is generated > caused by the following exception (see below for full stack trace): > java.net.BindException: Address already in use: connect > It appears that connections from the client to Axis on Tomcat sometimes (but > not always) remain in the TIME_WAIT state for several minutes. There are > 1200-1500 TIME_WAIT connections open when the AxisFault is generated. > If I step through the web service messages in a debugger, the problem does > not appear to occur, as the system eventually releases the connections after > a minute or two. > Also, if I insert a System.gc() in the client code each time it sends a > message to the web service (the commented out line of code below), the > AxisFault does not occur. I have executed the loop over 60,000 times with > the garbage collection included without generating an AxisFault. There were > only 400-700 connections in the TIME_WAIT state at a given time, but > performance slowed down to a crawl. > Here is the code I am using to create the Stub: > HttpConnectionManagerParams connectionManagerParams = new > HttpConnectionManagerParams(); > connectionManagerParams.setTcpNoDelay(true); > connectionManagerParams.setStaleCheckingEnabled(true); > > MultiThreadedHttpConnectionManager connectionManager = new > MultiThreadedHttpConnectionManager(); > connectionManager.setParams(connectionManagerParams); > HttpClient httpClient = new HttpClient(connectionManager); > > ConfigurationContext configurationContext = > ConfigurationContextFactory.createConfigurationContextFromFileSystem(null, > null); > configurationContext.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, > Boolean.TRUE); > configurationContext.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, > httpClient); > > stub = new MyServiceStub(configurationContext, target); > > boolean success = true; > while(success) { > success = stub.performService(records); > stub.cleanup(); > // System.gc(); > } > Here is the complete stack trace: > Exception in thread "main" org.apache.axis2.AxisFault: Address already > in use: connect > at org.apache.axis2.AxisFault.makeFault(AxisFault.java:377) > at > org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:179) > at > org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:73) > at > org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:310) > at > org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:202) > at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:446) > at > org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:330) > at > org.apache.axis2.description.OutInAxisOperationClient.execute(OutInAxisOperation.java:294) > at > com.ws.service.MyServiceStub.performService(MyServiceStub.java:300) > at com.ws.client.MyClient.main(MyClient.java:88) > Caused by: java.net.BindException: Address already in use: connect > at java.net.PlainSocketImpl.socketConnect(Native Method) > at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) > at > java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) > at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) > at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) > at java.net.Socket.connect(Socket.java:519) > at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:585) > at > org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:139) > at > org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:124) > at > org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:706) > at > org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:386) > at > org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170) > at > org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396) > at > org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346) > at > org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:558) > at > org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:176) > ... 8 more -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]