You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Marc Nädele <ma...@hotmail.com> on 2007/11/18 18:50:25 UTC

Re: [axis2] BindException from Axis client

Sorry for reopening this thread. But reading this thread, looking at the AsyncService2Test.java class and the mentioned JIRA issues still do not answer the question how I can solve the problem if I have an synchronous (blocking) web service client.

I have a service client using Axis 1.3 which is very similar to the Axis2 Weather POJO service example (so I do not post my code). The client is invoked very often in a short time so the mentioned problem with the open sockets arise until I get the BindException.

So my question is: if the AsyncService2Test.java shows the solution for an asynchronous client how can I use this for a synchronous client or is there an other solution?

Thanks in advance.



Date: Thu, 6 Sep 2007 21:17:30 -0400
From: davanum@gmail.com
To: axis-user@ws.apache.org
Subject: Re: [axis2] BindException from Axis client

Please see [1]. This test case was added to illustrate how to set up
all the options to make sure all the sockets get cleaned up.
 
-- dims
 
[1] http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/async/AsyncService2Test.java?view=markup
 
On 9/6/07, Jake Goulding  wrote:
> Andrew:
>
> This is exactly what is happening. I get many things stuck in the TCP
> TIME_WAIT state. Running my test, I see many sockets move into the
> TIME_WAIT state. I am doing my testing on Windows, which imposes a limit
> of about 4000 [1] ports by default. It also defaults to a 4 minute period.
>
> In order for a socket to get out of the TIME_WAIT state, the socket has
> to be closed cleanly from both sides during the 3- or 4- way closing
> handshake [3]. If the handshake is not done completely, it stays in the
> TIME_WAIT state for the timeout length, in order to allow lost packets
> to arrive.
>
> I assume that the Axis client must initiate the shutdown, as the server
> could not know when the communication is complete.
>
> I guess this boils down to two questions:
>
> 1/ Why does Axis not make use of the HTTP 1.1 spec wherein it would
> establish one connection and keep it open?
>
> 2/ Why does Axis not close the socket when it is done with it?
>
> Thanks for the feedback, I hope you can expand on some of my questions!
>
> -Jake
>
> [1] http://support.microsoft.com/support/kb/articles/q196/2/71.asp
> [2] http://www.windowsitpro.com/Articles/ArticleID/23276/23276.html
> [3]
> http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_termination
>
> Andrew McGhee wrote:
>> Hi Jake,
>> I'm not an expert in Axis at all, but I am wondering if you are
>> encountering an exhaustion of available ports for socket connections on
>> your machine.
>>
>> This is a wild stab in the dark, but I did have similar problems in a
>> Linux environment a long time ago, with socket based client / service
>> architecture.
>>
>> Have you tried "netstat -na" on the machine in question, and checked the
>> number of "TIME_WAIT" entries?
>>
>>
>>>>> goulding@vivisimo.com 09/07/07 5:43 am>>>
>> 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:195)
>>>         at
>>> org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:77)
>>>         at
>>>
>> org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:327)
>>>         at
>>>
>> org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:206)
>>>         at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:396)
>>>         at
>>>
>> org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:374)
>>>         at
>>>
>> org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.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.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.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1321)
>>>         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:520)
>>>         at
>>>
>> org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:191)
>>>         ... 9 more
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
>>> For additional commands, e-mail: axis-user-help@ws.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
>> For additional commands, e-mail: axis-user-help@ws.apache.org
>>
>>
>> *****************************************************************
>> This email, including any attachments sent with it, is
>> confidential and for the sole use of the intended recipient(s).
>> This confidentiality is not waived or lost, if you receive it and
>> you are not the intended recipient(s), or if it is transmitted/
>> received in error.
>>
>> Any unauthorised use, alteration, disclosure, distribution or
>> review of this email is strictly prohibited. The information
>> contained in this email, including any attachment sent with
>> it, may be subject to a statutory duty of confidentiality if it
>> relates to health service matters.
>>
>> If you are not the intended recipient(s), or if you have
>> received this email in error, you are asked to immediately
>> notify the sender by telephone collect on Australia
>> +61 1800 198 175 or by return email. You should also
>> delete this email, and any copies, from your computer
>> system network and destroy any hard copies produced.
>>
>> If not an intended recipient of this email, you must not copy,
>> distribute or take any action(s) that relies on it; any form of
>> disclosure, modification, distribution and/or publication of this
>> email is also prohibited.
>>
>> Although Queensland Health takes all reasonable steps to
>> ensure this email does not contain malicious software,
>> Queensland Health does not accept responsibility for the
>> consequences if any person's computer inadvertently suffers
>> any disruption to services, loss of information, harm or is
>> infected with a virus, other malicious computer programme or
>> code that may occur as a consequence of receiving this
>> email.
>>
>> Unless stated otherwise, this email represents only the views
>> of the sender and not the views of the Queensland Government.
>> ****************************************************************
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-user-help@ws.apache.org
>
>
 
 
-- 
Davanum Srinivas :: http://davanum.wordpress.com
_________________________________________________________________
Neu: Internet Explorer 7 optimiert für MSN!
http://optimize.de.msn.com/default.aspx?mkt=de-de
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org