Just a dumb idea, but in such a high performance environment, wouldn't a thread pool work better?, where each thread has a Stub and when it has done its work for that open request it is returned to the pool. If you initialize the pool to about 700 threads, then at least you have some control over the situation (varying the pool size to accommodate your available memory etc.) and you should never see the BindException because any Stub blocked waiting on a timeout (or general io wait) will not be returned to the pool yet.
The idea needs further work. It won't increase your throughput, but it might stop the exceptions and still be worth looking into? -jeff -----Original Message----- From: Jake Goulding [mailto:[EMAIL PROTECTED] Sent: Thursday, September 06, 2007 3:43 PM To: [email protected] Subject: Re: [axis2] BindException from Axis client This is just a bump. I'm sure that anyone else out there using Axis in an high-performance environment can easily run into this problem. Should I log a JIRA issue? Comment on one of the existing JIRAs? Thanks! -Jake Jake Goulding wrote: > Hey all: > > I wrote in with this problem quite a while back, and a few people tried > to help. The basic problem is that a stub, when making many requests > quickly, will eventually fail with a BindException: > > There are a few references to this issue in JIRA: > > https://issues.apache.org/jira/browse/AXIS2-2593 (Fixed) > https://issues.apache.org/jira/browse/AXIS2-2441 (Fixed) > https://issues.apache.org/jira/browse/AXIS2-2883 (Open) > > This is a fairly common case in our usage of webservices, and > particularly hits hard on Windows, which seems to default to only > allowing ~4000 open sockets at once. > > This is very easy to reproduce, all you need is a webservice that > returns quickly (a hello world service works well) and a loop in the > client that calls the service over and over. > > I have tried the following code with Axis 1.1.1 (our current production > version) as well as Axis 1.3. This code accesses a service on another > computer, so no sharing of resources should come into play. Perhaps I am > using Axis incorrectly, and would be glad to be corrected if that is the > case. I added a call to Stub.cleanup() inside the loop, but it did not > seem to help. > > Thanks for all your help in advance! > > -Jake > > > My sample code: > > Service1Stub s = new Service1Stub(); > for (int i = 0; i < 5000; i++) { > Service1Stub.HelloWorldResponse r = null; > Service1Stub.HelloWorld h = new Service1Stub.HelloWorld(); > r = s.HelloWorld(h); > } > > My exception: > > Exception in thread "main" org.apache.axis2.AxisFault: Address already > in use: connect > at org.apache.axis2.AxisFault.makeFault(AxisFault.java:417) > at > org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:1 95) > at > org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:77) > at > org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageW ithCommons(CommonsHTTPTransportSender.java:327) > at > org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(Common sHTTPTransportSender.java:206) > at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:396) > at > org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOper ation.java:374) > at > org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInA xisOperation.java:211) > at > org.apache.axis2.client.OperationClient.execute(OperationClient.java:163 ) > at test.Service1Stub.HelloWorld(Service1Stub.java:145) > at Loop.main(Loop.java:12) > Caused by: java.net.BindException: Address already in use: connect > at java.net.PlainSocketImpl.socketConnect(Native Method) > at java.net.PlainSocketImpl.doConnect(Unknown Source) > at java.net.PlainSocketImpl.connectToAddress(Unknown Source) > at java.net.PlainSocketImpl.connect(Unknown Source) > at java.net.SocksSocketImpl.connect(Unknown Source) > at java.net.Socket.connect(Unknown Source) > at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > at java.lang.reflect.Method.invoke(Unknown Source) > at > org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSoc ket(ReflectionSocketFactory.java:139) > at > org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.crea teSocket(DefaultProtocolSocketFactory.java:124) > at > org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:70 6) > at > org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpCon nectionAdapter.open(MultiThreadedHttpConnectionManager.java:1321) > at > org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMe thodDirector.java:386) > at > org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMetho dDirector.java:170) > at > org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:3 96) > at > org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:3 46) > at > org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(Abstrac tHTTPSender.java:520) > at > org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:1 91) > ... 9 more > > > --------------------------------------------------------------------- > 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]
