Unix and Linux systems have a per-process limit on the number of open files. In some configurations, particularly with a large number of threads per child process, web server operations can fail due to reaching the limit. Sockets can no longer be created, client connections can no longer be accepted, files can no longer be opened, etc.
The problem is usually interimittent; the web server is continually closing files or sockets that it has opened, so the limit is reached briefly under the higher load, and the file descriptor usage can then lower, in a cycle.
Here are just a few examples of messages which can appear in the error log when this limit is reached:
[crit] (24)Too many open files: SSL0600S: Unable to connect to session ID cache [error] (24)Too many open files: apr_accept: (client socket) [error] (23)Too many open files: apr_accept: (client socket) (24)Too many open files: file permissions deny server access: /opt/IBMHttpServer/htdocs/en_US/index.html
Consult your operating system documentation to determine how to make the change permanent (e.g. /etc/sysctl.conf).
ulimit -H -n 4096 ulimit -n 4096
apr_accept
error message above) the affected child process will perform a
graceful shutdown; this graceful shutdown allows any pending client requests to
complete uninterrupted. Hint: The value can regularly be well over ThreadsPerChild*2