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]

Reply via email to