One of the most important tasks when we are setting Apache up is to fit its directives, which allow to control the overall running of the web server. These directives always depend on the available hardware, as well as the type of content that you want to serve. They are located inside the httpd.conf file; bellow, I will show you the most meaningful directives.
- StartServers: number of child server processes created on startup. This value is related to the initial HTTP load of the machine, whether there are another configured services, and so on. For example, if the computer only works as a web server, there is no problem to start with 50 processes, but if there are other running services such as FTP, mail, database, etc., and in addition, it runs low on computational resources, we should start with a small number of active processes, and afterwards, on real time, Apache itself would have to launch the needed ones.
- MaxClients: maximum number of simultaneous processes that can be running at the same time.
- ServerLimit: maximum number of processes for the MaxClients parameter.
- MinSpareServers: minimum number of idle child server processes.
- MaxSpareServers: maximum number of idle child server processes.
- MaxRequestsPerChild: maximum number of requests that an individual child server will handle during its life.
- Timeout: amount of time the server will keep an inactive connection before closing it.
When Apache is started, several processes are created (StartServers) in order to listen for potential connections. When a request reaches the server, this is attended by a child process, and then, the process switches to idle state, waiting for new connections. If at a given time the number of requests is greater than the number of available processes (MaxClients), these requests are queued. Must be satisfied that MaxClients ≤ ServerLimit.
We can work out the maximum number of httpd processes that our system can run based on the available memory. You have to divide the free memory of the server by the amount of memory taken by an unique Apache process.
So as to calculate the free memory of the system, you can use the following command.
[root@centos ~]# cat /proc/meminfo | grep MemFree MemFree: 346492 kB
And in order to find out the amount of memory grabbed by an Apache process, you may run the next order.
[root@centos ~]# ps -ylC httpd S UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMD S 0 1870 1 0 80 0 3404 2792 - ? 00:00:00 httpd S 48 1873 1870 0 80 0 2072 2792 - ? 00:00:00 httpd S 48 1874 1870 0 80 0 2072 2792 - ? 00:00:00 httpd S 48 1875 1870 0 80 0 2072 2792 - ? 00:00:00 httpd