'UnicastUdpSocket failed to set receive buffer size to 1428 packets' Error Due to Coherence Tuning
This article applies to Confluence clustered 5.4 or earlier.
The following error is thrown in the log:
2010-08-16 22:46:00,775 WARN [Logger@28329183 3.3.1/389] [Coherence] log 2010-08-16 22:46:00.775 Oracle Coherence GE 3.3.1/389 <Warning> (thread=main, member=n/a): UnicastUdpSocket failed to set receive buffer size to 1428 packets (2096304 bytes); actual size is 89 packets (131071 bytes). Consult your OS documentation regarding increasing the maximum socket buffer size. Proceeding with the actual value may cause sub-optimal performance.
Clustered versions of Confluence utilizing Oracle Coherence 3.1 libraries require OS Level Tweaks for optimal performance.
Refer to the Coherence Documentation:
Running the below will set these parameters for this session only. In order to maintain these settings across system reboots, modify /etc/sysctl.conf.
Socket Buffer Sizes
To help minimization of packet loss, the OS socket buffers need to be large enough to handle the incoming network traffic while your Java application is paused during garbage collection. By default Coherence will attempt to allocate a socket buffer of 2MB. If your OS is not configured to allow for large buffers Coherence will utilize smaller buffers. Most versions of Unix have a very low default buffer limit, which should be increased to at least 2MB.
Starting with Coherence 3.1 you will receive the following warning if the OS failed to allocate the full size buffer.
UnicastUdpSocket failed to set receive buffer size to 1428 packets (2096304 bytes); actual size is 89 packets (131071 bytes). Consult your OS documentation regarding increasing the maximum socket buffer size. Proceeding with the actual value may cause sub-optimal performance.
Though it is safe to operate with the smaller buffers it is recommended that you configure your OS to allow for larger buffers.
On Linux execute (as root):
sysctl -w net.core.rmem_max=2096304
sysctl -w net.core.wmem_max=2096304
On Solaris execute (as root):
ndd -set /dev/udp udp_max_buf 2096304
On AIX execute (as root):
no -o rfc1323=1
no -o sb_max=4194304
no -o udp_recvspace=4194304
no -o udp_sendspace=65536
Note that AIX only supports specifying receive buffer sizes of 1MB, 4MB, and 8MB. Additionally there is an issue with IBM's 1.4.2, and 1.5 JVMs which may prevent them from allocating socket buffers larger then 64K. This issue has been addressed in IBM's 1.4.2 SR7 SDK and 1.5 SR3 SDK.
Windows does not impose a buffer size restriction by default.
For information on increasing the buffer sizes for other OSs please refer to your OS's documentation.
You may configure Coherence to request alternate sized buffers via the coherence/cluster-config/packet-publisher/packet-buffer/maximum-packets and coherence/cluster-config/unicast-listener/packet-buffer/maximum-packets elements.