Support

Why do I see "An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full." error mesasges in the log file?

Grant -

This error message, which is associated with the Winsock error WSAENOBUFS and actually comes from Windows rather than Cerberus FTP Server directly, has two well-understood root causes. However, it still stumps people today, probably because there is no single source which explains both root causes and offers solutions for both. This error is usually the result of the server's resources being exhausted by too many server processes (database and file servers, web and FTP servers, and any other server process which accepts connections) running on the machine . We've also heard of it happening on some buggy virtual machines.

Here are two common situations where you may see this error and quick solutions for each:

OS runs out of memory for TCP buffers

When a powerful client machine, especially one with lots of RAM, is running an x86 version of Windows, people use the /PAE switch in the c:\boot.ini file to allow applications on that machine to be able to address the full range of memory. One other switch often used to give more memory to applications is the /3gb switch in the boot.ini file. The problem comes when these two are combined: the /3gb switch gives more memory to applications by reducing the amount of memory available to the OS. When it is used on a powerful machine where the applications require many OS resources, such as by opening many TCP connections, this can cause the OS to run out of memory for resources like TCP buffers. When that happens, Winsock throws the error WSAENOBUFS.

Solution: Remove the /3gb switch from c:\boot.ini. The root problem in this case is memory pressure on the OS, so removing the /3gb switch will give more memory to the OS and will alleviate this problem.

OS runs out of available TCP “ephemeral” ports

When the machine is opening many TCP connections and is running Windows Server 2008, 2003, Windows XP, or any earlier version of Windows, it may run out of TCP “ephemeral” ports. In Windows Server 2003, Windows XP, and earlier versions, Windows limits the number of available ephemeral ports to approximately 5000 across the machine. It is especially common to hit this problem for applications which do not use connection pooling.

Solution: To make more ephemeral ports available, follow the directions in this KB which describe how to create the MaxUserPort registry key: http://support.microsoft.com/kb/196271

If neither of the above solutions apply or fix the problem

The simplest fix is to reduce some other service process or move it to a dedicated machine but there are some other tips you can follow with Cerberus FTP Server to reduce the likelyhood of this issue occurring.

This error is related to high levels of network traffic on your server and you can reduce local network traffic by not leaving the Cerberus GUI open when you are not using it to administer the server. When running as a service, Cerberus is split into two processes. One process is the Windows Service that is always running and doesn't have a GUI, and the other is started whenever you launch the Cerberus GUI. The Windows Service and GUI communicate over a protocol called SOAP. It's an HTTP/S-based protocol for remote communication.

On the service side, there is SOAP service waiting for connections on port 10000 (the default). When the GUI is started it begins connecting to the service and exchanging data back and forth. This happens anytime the GUI requests data from the server. This happens about every 1 - 2 seconds to retrieve status information from the service and anytime you open or close server or user manager pages. Currently, a new connection is opened and closed for each operation and this additional local traffic on an already taxed sever can eventually exhaust ephemeral ports.

There is no SOAP traffic when the server is started in application mode(not an option for most people), and no SOAP traffic when the server is started in service mode and the GUI is not running. As long as you shutdown the GUI when you are not administering the server then local network traffic will be significantly reduced and this should help with the queue full error.

Have more questions? Submit a request

Comments