|
Posted by Craig Kelly on 09/29/12 11:19
<daniel.shaya@tamesis.com> wrote:
> I'll try and keep this brief so in a nutshell:
>
> I have large distributed java system running on a Windows 2003 server
> (4cpu 8Gb memory).
>
> Periodically the following exceptions occurs in the servers:
>
> java.net.SocketException: No buffer space available (maximum
> connections reached?): recv failed
>
> I know for a fact we are not using too many TCPIP sockets or running
> too many socket servers.
>
> I have googled this error and found very little to help me.
>
> What buffer space is this?
> What does recv failed mean?
>
> (Is it at all relevant that sql server is running on the same box?)
>
> Any advice appreciated.
> Thanks in advance.
>
> Dan
Dan,
Erland's already explained what recv is. The buffer the error message is
talking about refers to the TCP/IP stack's buffers. The error you're seeing
can be caused by multiple things: too much data queued up for send via
TCP/IP or you're out of ephemeral sockets. The big problem is that the
number of available ephmeral sockets doesn't change just because you have a
massive amount of RAM. I'm not a Winsock expert, but running out of
ephemeral sockets is common problem on Windows. Well, not that common, but
it's a fairly well known occurrence amoung the networking guru's (I'm *not*
one of those).
> (Is it at all relevant that sql server is running on the same box?)
Maybe: it definitely won't help
> I know for a fact we are not using too many TCPIP sockets or running
> too many socket servers.
Are you sure? Because it's not just how many you have open simultaneously:
if you're rapidly opening and closing sockets you could cause the problem
you're seeing... there's a timeout period before the socket you closed is
returned to the available pool. Also, I haven't worked with Java's sockets
that much: if you don't explicitly close the socket, does it stick around
until a garbage collection cycle?
Download tcpview.exe from sysinternals.com: when the problem occurs, fire it
up and see what process has the greatest number of sockets out there. If
I'm correct, you'll probably see a bunch of sockets associated with one or a
few processes (and they'll probably be in the TIME_WAIT state...)
Here's some links that may help
A discussion of ephemeral ports
http://www.tcpipguide.com/free/t_TCPIPClientEphemeralPortsandClientServerApplicatio.htm
See this for some help on the Windows side (but be careful!)
http://support.microsoft.com/default.aspx?scid=kb;EN-US;196271
See this for someone with a similar problem...
http://forum.java.sun.com/thread.jspa?threadID=482535&messageID=3177261
Craig
[Back to original message]
|