[Spread-users] Re: NegativeArraySizeException under load

toby cabot tcabot at revasystems.com
Fri Mar 18 09:27:37 EST 2005


toby cabot wrote:
> We're seeing problems with the Java driver when we send a reasonable
> (greater than a couple hundred messages per second) load of messages
> across Spread.  <snip>
> java.lang.NegativeArraySizeException
(also OutOfMemoryExceptions)

One of my TCP-savvy colleagues chased down a workaround for this 
problem.  The problems is caused by overruns in the TCP receive buffer, 
so a workaround is to increase the receive buffer size.  In our case 
128k seems to work, but higher loads might require larger buffer sizes. 
  Interestingly, there's a method called setBufferSizes() that has code 
to increase the buffer size, but for some reason that code is commented out.

> // Set the send and receive buffer sizes.
> /////////////////////////////////////////
> private void setBufferSizes() throws SpreadException
> {
> /* NOT SUPPORTED IN 1.1			
> 	try
> 	{
<snip>
> 	catch(SocketException e)
> 	{
> 		throw new SpreadException("set/getSend/ReceiveBufferSize(): " + e);
> 	}
> NOT SUPPORTED IN 1.1	*/
> }

I'm not sure why it's commented out (maybe it's got other side effects) 
but something like it should be put back as the driver can't cope with 
non-trivial loads without it.

Any thoughts on the idea of adding some framing to the server-client 
messages so that the driver can tell when an overrun has happened and 
recover from it?

Thanks,
Toby




More information about the Spread-users mailing list