J
Jeff
I would greatly appreciate some good advice on a problem that has eluded us.
Our server has what appears to be a network IO problem under load. We have
seen one instance of an error message that we think is a strong clue:
java.net.SocketException: Insufficient buffer space
However, we can't find any documentation on what this error means? Which
buffer space?
ARCHITECTURE
1. our probe sends large volumes of data to our server
2. the probe-server connection is tcp carrying proprietary data
3. at times, our probe definitely sends more data than the server can
process. We expected tcp congestion control to throttle the probe.
OPTIMIZATIONS COMPLETED
1. set the socket's receiveBufferSize to 32768
2. set the the buffered input stream's buffer size to 1024000
SYMPTOMS
1. data in buffer returned by inputStream.read() appears to be off by 2 or 3
bytes
2. no tcp congestion control (advertised window does not decrease)
3. according to the server's operating system stats, the receiver queue
builds up
4. data input rate is 7 to 8 Meg continuous.
ENVIRONMENT
- running BEA's JRockit JVM
- both SuSE 8.2 and WinXP.
- Lot of processing on the buffer returned by the read call is available for
garbage collection
SERVER'S SOCKET CODE
Socket probeSocket = sock.accept();
if ( probeSocket.getReceiveBufferSize() < 32768 )
probeSocket.setReceiveBufferSize(32768);
BufferedInputStream is = new BufferedInputStream(
probeSocket.getInputStream(), 1024000 );
Thanks
Our server has what appears to be a network IO problem under load. We have
seen one instance of an error message that we think is a strong clue:
java.net.SocketException: Insufficient buffer space
However, we can't find any documentation on what this error means? Which
buffer space?
ARCHITECTURE
1. our probe sends large volumes of data to our server
2. the probe-server connection is tcp carrying proprietary data
3. at times, our probe definitely sends more data than the server can
process. We expected tcp congestion control to throttle the probe.
OPTIMIZATIONS COMPLETED
1. set the socket's receiveBufferSize to 32768
2. set the the buffered input stream's buffer size to 1024000
SYMPTOMS
1. data in buffer returned by inputStream.read() appears to be off by 2 or 3
bytes
2. no tcp congestion control (advertised window does not decrease)
3. according to the server's operating system stats, the receiver queue
builds up
4. data input rate is 7 to 8 Meg continuous.
ENVIRONMENT
- running BEA's JRockit JVM
- both SuSE 8.2 and WinXP.
- Lot of processing on the buffer returned by the read call is available for
garbage collection
SERVER'S SOCKET CODE
Socket probeSocket = sock.accept();
if ( probeSocket.getReceiveBufferSize() < 32768 )
probeSocket.setReceiveBufferSize(32768);
BufferedInputStream is = new BufferedInputStream(
probeSocket.getInputStream(), 1024000 );
Thanks