OpenVZ is operating system-level virtualization technology that allows to run multiple virtual machines (with dedicated IP addresses) on one box (with shared filesystem). It's like a dedicated server but it's not the one. You have to overcome many limitations:
- Limits on VSZ memory size (virtual, allocated but no necessary used) memory (dedicated servers and Xen have limits on used memory: RSS)
- Fixed kernel with modules (no custom compilations here)
- Limits on inodes allocated etc.
One of important limitations is limit of size of unswapped memory allocated to kernel. In this area resides tcpsndbuf.It's summary size of buffers that are used to send data. If the value is low your download speed may be limited and sometimes you are getting error:
105 No buffer space available
You can check your limits by executing the following command:
# grep tcpsndbuf /proc/user_beancounters tcpsndbuf 174336 1735168 1720320 2703360 2801251
Current buffer usage is 174336 bytes, limit is 1720320 bytes and limit was exceeded 2801251 times (ops!). Why send buffer is the problem here instead of receive buffer? Most of the time HTTP server is sending data - requests are much smaller than HTTP responses.
Solutions for this error:
- Limit concurrent connections server handles
- Check if unused connections are closed as soon as possible