The essentials of tuning Apache for optimum performance are discussed
in depth at
http://httpd.apache.org/docs/misc/perf-tuning.html. Some of
the advice given here is definitely Apache specific, but parts (or at
least the principles behind them) are more generally applicable.
Some simple rules follow:
Linux limits the number of file descriptors that any one process may open; the default limits are 1024 per process. These limits can prevent optimum performance of both benchmarking clients (such as httperf and apachebench) and of the web servers themselves (Apache is not affected, since it uses a process per connection, but single process web servers such as Zeus use a file descriptor per connection, and so can easily fall foul of the default limit).
The open file limit is one of the limits that can be tuned with the
ulimit command. The command
ulimit -aS displays the current
ulimit -aH displays the hard limit (above which the
limit cannot be increased without tuning kernel parameters in /proc).
The following is an example of the output of
ulimit -aH. You
can see that the current shell (and its children) is restricted to
1024 open file descriptors.
core file size (blocks) unlimited data seg size (kbytes) unlimited file size (blocks) unlimited max locked memory (kbytes) unlimited max memory size (kbytes) unlimited open files 1024 pipe size (512 bytes) 8 stack size (kbytes) unlimited cpu time (seconds) unlimited max user processes 4094 virtual memory (kbytes) unlimited
The file descriptor limit can be increased using the following procedure:
/etc/security/limits.confand add the lines:
* soft nofile 1024 * hard nofile 65535
/etc/pam.d/login, adding the line:
session required /lib/security/pam_limits.so
/proc/sys/fs/file-max. The following command will increase the limit to 65535:
echo 65535 > /proc/sys/fs/file-max
ulimit -n unlimitedThe above command will set the limits to the hard limit specified in
Note that you may need to log out and back in again before the changes take effect.