Httpd prefork MPM

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

Internal

Overview

prefork MPM is a non-threaded web server that handles requests in a manner similar to Apache 1.3. The prefork MPM uses multiple child processes with one thread each. Each process handles one connection at a time. In order to handle concurrent requests, we need to start as many processes as concurrent requests.

This is the default MPM for Unix, if the httpd was installed with the default configuration, it will run in prefork MPM mode.

This mode is appropriate for sites that need to avoid threading for compatibility with non-thread-safe libraries. It is also the best MPM for isolating each request, so that a problem with a single request will not affect any other. On many systems, prefork is comparable in speed to worker, but it uses more memory.

This MPM is very self-regulating, so it is rarely necessary to adjust its configuration directives. Most important is that MaxClients be big enough to handle as many simultaneous requests as you expect to receive, but small enough to assure that there is enough physical RAM for all processes.

A single control process is responsible for launching child processes which listen for connections and serve them when they arrive. Apache always tries to maintain several spare or idle server processes, which stand ready to serve incoming requests. In this way, clients do not need to wait for a new child processes to be forked before their requests can be served.

The StartServers, MinSpareServers, MaxSpareServers, and MaxClients regulate how the parent process creates children to serve requests. In general, Apache is very self-regulating, so most sites do not need to adjust these directives from their default values. Sites which need to serve more than 256 simultaneous requests may need to increase MaxClients, while sites with limited memory may need to decrease MaxClients to keep the server from thrashing.

While the parent process is usually started as root under Unix in order to bind to port 80, the child processes are launched by Apache as a less-privileged user.

Configuration

prefork MPM Configuration