You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geronimo.apache.org by Gianny Damour <gi...@optusnet.com.au> on 2008/04/17 14:31:10 UTC

Re: remote ejb scalability issue

Hi,

It would be great to have only one TCP/IP connection opened between  
an EJB client and the EJB server and this across multiple requests.  
My understanding is that at the moment a TCP/IP connection is  
negotiated for each EJB request which is very expensive especially  
based on the rather small size of the payload being passed back and  
forth over TCP/IP.

Thanks,
Gianny

On 17/04/2008, at 12:27 PM, Kevan Miller wrote:

>
> On Apr 16, 2008, at 6:30 PM, Trygve Hardersen wrote:
>> I checked out the 2.1.1 branch that is using openejb 3.0, but I'm
>> still getting the error. It seems less frequent though, but it's  
>> still
>> bad. The stack trace is different, but the root cause is the same:
>
> Hi Trygve,
> I'm guessing that you're running on a Windows? I've only seen this  
> type of error happen on a Windows. Note that this is a client  
> socket (not a server socket). We aren't assigning the port  
> address... It's being assigned to the socket dynamically.
>
> One possibility is that you are exhausting the available user port  
> numbers. When a socket is closed, it goes into a TIME_WAIT state  
> and isn't actual closed until some delay time. By default, the max  
> user port address is 5000 and the TIME_WAIT delay is 4 minutes. So,  
> it's not too difficult to exhaust all possible user port addresses.
>
> You have to update the Windows Registry to change these values.  
> Here's a Windows 2000 doc on the registry settings -- http:// 
> technet.microsoft.com/en-us/library/bb726981.aspx
>
> MaxUserPorts controls the upper range for user ports.
> TcpTimedWaitDelay controls the TIME_WAIT delay.
>
> Hopefully, increasing MaxUserPorts (e.g. 65534) and decreasing  
> TcpTimedWaitDelay (e.g. 30)will fix your problem.
>
> If not, then I also recall a problem where Windows would assign the  
> same dynamic port address to 2 (or more) newly created sockets. It  
> was then a race to see which one would be activated first and the  
> other one would get a bind failure. Not sure there's anything we  
> can do about that...
>
> --kevan
>


Re: remote ejb scalability issue

Posted by David Blevins <da...@visi.com>.
On Apr 17, 2008, at 5:31 AM, Gianny Damour wrote:

> Hi,
>
> It would be great to have only one TCP/IP connection opened between  
> an EJB client and the EJB server and this across multiple requests.  
> My understanding is that at the moment a TCP/IP connection is  
> negotiated for each EJB request which is very expensive especially  
> based on the rather small size of the payload being passed back and  
> forth over TCP/IP.

Absolutely!  It's been on my mental TODO list for quite some time.   
Last time I looked the trickiest thing was that the code sort of had  
the notion it could close the socket, etc.  If we could get a setup  
similar to a servlet container where the inputstream/outputstream  
passed were not the actual streams (thinking of request.getInputStream/ 
response.getOutputStream) it would fit really well.  There might be  
some code in Tomcat/Jetty that we can "borrow."

If you'd like to take a look at it, excellent!

-David


> On 17/04/2008, at 12:27 PM, Kevan Miller wrote:
>
>>
>> On Apr 16, 2008, at 6:30 PM, Trygve Hardersen wrote:
>>> I checked out the 2.1.1 branch that is using openejb 3.0, but I'm
>>> still getting the error. It seems less frequent though, but it's  
>>> still
>>> bad. The stack trace is different, but the root cause is the same:
>>
>> Hi Trygve,
>> I'm guessing that you're running on a Windows? I've only seen this  
>> type of error happen on a Windows. Note that this is a client  
>> socket (not a server socket). We aren't assigning the port  
>> address... It's being assigned to the socket dynamically.
>>
>> One possibility is that you are exhausting the available user port  
>> numbers. When a socket is closed, it goes into a TIME_WAIT state  
>> and isn't actual closed until some delay time. By default, the max  
>> user port address is 5000 and the TIME_WAIT delay is 4 minutes. So,  
>> it's not too difficult to exhaust all possible user port addresses.
>>
>> You have to update the Windows Registry to change these values.  
>> Here's a Windows 2000 doc on the registry settings -- http://technet.microsoft.com/en-us/library/bb726981.aspx
>>
>> MaxUserPorts controls the upper range for user ports.
>> TcpTimedWaitDelay controls the TIME_WAIT delay.
>>
>> Hopefully, increasing MaxUserPorts (e.g. 65534) and decreasing  
>> TcpTimedWaitDelay (e.g. 30)will fix your problem.
>>
>> If not, then I also recall a problem where Windows would assign the  
>> same dynamic port address to 2 (or more) newly created sockets. It  
>> was then a race to see which one would be activated first and the  
>> other one would get a bind failure. Not sure there's anything we  
>> can do about that...
>>
>> --kevan
>>
>
>


Re: remote ejb scalability issue

Posted by Kevan Miller <ke...@gmail.com>.
On Apr 17, 2008, at 8:31 AM, Gianny Damour wrote:

> Hi,
>
> It would be great to have only one TCP/IP connection opened between  
> an EJB client and the EJB server and this across multiple requests.  
> My understanding is that at the moment a TCP/IP connection is  
> negotiated for each EJB request which is very expensive especially  
> based on the rather small size of the payload being passed back and  
> forth over TCP/IP.

Definitely agree it's something to look into. I had thought about  
that, but got focussed on getting this guy past his immediate problem.

You should make this suggestion on dev@openejb...

--kevan