prefork.html revision 2eaf662cbc81e823e8d9aeb8d54e69e63032493e
ebeccf9eecf5939a2ef772c3160e89efcad96194Lennart Poettering<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
ebeccf9eecf5939a2ef772c3160e89efcad96194Lennart Poettering "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
ebeccf9eecf5939a2ef772c3160e89efcad96194Lennart Poettering<html xmlns="http://www.w3.org/1999/xhtml">
ebeccf9eecf5939a2ef772c3160e89efcad96194Lennart Poettering <meta name="generator" content="HTML Tidy, see www.w3.org" />
ebeccf9eecf5939a2ef772c3160e89efcad96194Lennart Poettering <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
ebeccf9eecf5939a2ef772c3160e89efcad96194Lennart Poettering <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
ebeccf9eecf5939a2ef772c3160e89efcad96194Lennart Poettering <!--#include virtual="header.html" -->
ebeccf9eecf5939a2ef772c3160e89efcad96194Lennart Poettering <h1 align="CENTER">Multi-Processing Module prefork</h1>
ebeccf9eecf5939a2ef772c3160e89efcad96194Lennart Poettering <p>This Multi-Processing Module implements a non-threaded,
ebeccf9eecf5939a2ef772c3160e89efcad96194Lennart Poettering pre-forking web server.</p>
ebeccf9eecf5939a2ef772c3160e89efcad96194Lennart Poettering rel="Help"><strong>Status:</strong></a> MPM<br />
003dffde2c1b93afbc9aff24b277276f65424406Lennart Poettering rel="Help"><strong>Source File:</strong></a> prefork.c<br />
ee104e11e303499a637c5cd8157bd12ad5cc116dLennart Poettering <a href="module-dict.html#ModuleIdentifier"
ee104e11e303499a637c5cd8157bd12ad5cc116dLennart Poettering rel="Help"><strong>Module Identifier:</strong></a>
ee104e11e303499a637c5cd8157bd12ad5cc116dLennart Poettering mpm_prefork_module</p>
1ddb263d21099ae42195c2bc382bdf72a7f24f82Lennart Poettering <p>This Multi-Processing Module (MPM) implements a
086821244b5113f00a0ef993b78dc56aae2a8f6cLennart Poettering non-threaded, pre-forking web server which handles request in a
086821244b5113f00a0ef993b78dc56aae2a8f6cLennart Poettering manner very similar to the default behavior of Apache 1.3 on
1ddb263d21099ae42195c2bc382bdf72a7f24f82Lennart Poettering <p>A single control process is responsible for launching child
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering processes which listen for connections and serve them when they
086821244b5113f00a0ef993b78dc56aae2a8f6cLennart Poettering arrive. Apache always tries to maintain several <em>spare</em>
086821244b5113f00a0ef993b78dc56aae2a8f6cLennart Poettering or idle server processes, which stand ready to serve incoming
086821244b5113f00a0ef993b78dc56aae2a8f6cLennart Poettering requests. In this way, clients do not need to wait for a new
1ddb263d21099ae42195c2bc382bdf72a7f24f82Lennart Poettering child processes to be forked before their requests can be
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering <p>The <code>StartServers</code>, <code>MinSpareServers</code>,
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering <code>MaxSpareServers</code>, and <code>MaxClients</code>
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering regulate how the parent process creates children to serve
403ed0e5c914f2a0a683403d8ba7eaf96e3ffcdfMichael Chapman requests. In general, Apache is very self-regulating, so most
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering sites do not need to adjust these directives from their default
c529695e7a30b300fdaa61ace4a8a4ed0e94ad1cLennart Poettering values. Sites which need to serve more than 256 simultaneous
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering requests may need to increase <code>MaxClients</code>, while
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering sites with limited memory may need to decrease
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering <code>MaxClients</code> to keep the server from thrashing
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering (swapping memory to disk and back). More information about
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering tuning process creation is provided in the <a
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering href="/misc/perf-tuning.html">performance hints</a>
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering documentation.</p>
086821244b5113f00a0ef993b78dc56aae2a8f6cLennart Poettering <p>While the parent process is usually started as root under
086821244b5113f00a0ef993b78dc56aae2a8f6cLennart Poettering Unix in order to bind to port 80, the child processes are
086821244b5113f00a0ef993b78dc56aae2a8f6cLennart Poettering launched by Apache as a less-privileged user. The
086821244b5113f00a0ef993b78dc56aae2a8f6cLennart Poettering <code>User</code> and <code>Group</code> directives are used to
086821244b5113f00a0ef993b78dc56aae2a8f6cLennart Poettering set the privileges of the Apache child processes. The child
086821244b5113f00a0ef993b78dc56aae2a8f6cLennart Poettering processes must be able to read all the content that will be
1ddb263d21099ae42195c2bc382bdf72a7f24f82Lennart Poettering served, but should have as few privileges beyond that as
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering possible. In addition, unless <a
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering href="/suexec.html">suexec</a> is used, these directives also
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering set the privileges which will be inherited by CGI scripts.</p>
1ddb263d21099ae42195c2bc382bdf72a7f24f82Lennart Poettering <p><code>MaxRequestsPerChild</code> controls how frequently the
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering server recycles processes by killing old ones and launching new
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering <p>See also: <a href="/bind.html">Setting which addresses and
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering <li><a href="#acceptmutex">AcceptMutex</a></li>
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering <li><a href="mpm_common.html#group">Group</a></li>
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering <li><a href="mpm_common.html#pidfile">PidFile</a></li>
403ed0e5c914f2a0a683403d8ba7eaf96e3ffcdfMichael Chapman <li><a href="mpm_common.html#listen">Listen</a></li>
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering <li><a href="mpm_common.html#lockfile">LockFile</a></li>
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering <li><a href="mpm_common.html#maxclients">MaxClients</a></li>
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering <li><a href="#maxspareservers">MaxSpareServers</a></li>
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering <li><a href="#minspareservers">MinSpareServers</a></li>
1ddb263d21099ae42195c2bc382bdf72a7f24f82Lennart Poettering href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering href="mpm_common.html#startservers">StartServers</a></li>
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering <li><a href="mpm_common.html#user">User</a></li>
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering <h2><a id="AcceptMutex" name="AcceptMutex">AcceptMutex
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering rel="Help"><strong>Syntax:</strong></a> AcceptMutex
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering rel="Help"><strong>Default:</strong></a> <code>AcceptMutex
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering rel="Help"><strong>Context:</strong></a> server config<br />
403ed0e5c914f2a0a683403d8ba7eaf96e3ffcdfMichael Chapman rel="Help"><strong>Status:</strong></a> core</p>
c529695e7a30b300fdaa61ace4a8a4ed0e94ad1cLennart Poettering <p>The <code>AcceptMutex</code> directives sets the method that
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering Apache uses to serialize multiple children accepting requests
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering on network sockets. Prior to Apache 2.0, the method was
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering selectable only at compile time. The optimal method to use is
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering highly architecture and platform dependent. For further
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering details, see the <a href="/misc/perf-tuning.html">performance
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering <p>If this directive is set to <code>default</code>, then the
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering compile-time selected default will be used. Other possible
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering methods are listed below. Note that not all methods are
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering available on all platforms. If a method is specified which is
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering not available, a message will be written to the error log
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering listing the available methods.</p>
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering <dd>uses the <code>flock(2)</code> system call to lock the
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering file defined by the <a
1ddb263d21099ae42195c2bc382bdf72a7f24f82Lennart Poettering href="mpm_common.html#lockfile">LockFile</a> directive.</dd>
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering <dd>uses the <code>fnctl(2)</code> system call to lock the
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering file defined by the <a
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering href="mpm_common.html#lockfile">LockFile</a> directive.</dd>
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering <dd>uses SySV-style semaphores to implement the mutex.</dd>
403ed0e5c914f2a0a683403d8ba7eaf96e3ffcdfMichael Chapman <dd>uses POSIX mutexes as implemented by the POSIX Threads
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering (PThreads) specification.</dd>
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering name="maxspareservers">MaxSpareServers directive</a></h2>
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering <!--%plaintext <?INDEX {\tt MaxSpareServers} directive> -->
70244d1d25eb80b57e160ea004d0e6bf793d4cafLennart Poettering rel="Help"><strong>Syntax:</strong></a> MaxSpareServers
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering rel="Help"><strong>Default:</strong></a> <code>MaxSpareServers
ebd93cb684806ac0f352139e69ac8f53eb49f5e4Lennart Poettering rel="Help"><strong>Context:</strong></a> server config<br />
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering rel="Help"><strong>Status:</strong></a> core
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering <p>The MaxSpareServers directive sets the desired maximum
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering number of <em>idle</em> child server processes. An idle process
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering is one which is not handling a request. If there are more than
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering MaxSpareServers idle, then the parent process will kill off the
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering excess processes.</p>
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering <p>Tuning of this parameter should only be necessary on very
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering busy sites. Setting this parameter to a large number is almost
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering always a bad idea.</p>
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering <p>See also <a href="#minspareservers">MinSpareServers</a> and
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering <a href="mpm_common.html#startservers">StartServers</a>.</p>
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering name="minspareservers">MinSpareServers directive</a></h2>
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering <!--%plaintext <?INDEX {\tt MinSpareServers} directive> -->
403ed0e5c914f2a0a683403d8ba7eaf96e3ffcdfMichael Chapman rel="Help"><strong>Syntax:</strong></a> MinSpareServers
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering rel="Help"><strong>Default:</strong></a> <code>MinSpareServers
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering rel="Help"><strong>Context:</strong></a> server config<br />
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering rel="Help"><strong>Status:</strong></a> core
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering <p>The MinSpareServers directive sets the desired minimum
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering number of <em>idle</em> child server processes. An idle process
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering is one which is not handling a request. If there are fewer than
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering MinSpareServers idle, then the parent process creates new
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering children at a maximum rate of 1 per second.</p>
d6ce17c7f02ed3facdb45f65f546e587c2f00950Lennart Poettering <p>Tuning of this parameter should only be necessary on very
ebeccf9eecf5939a2ef772c3160e89efcad96194Lennart Poettering busy sites. Setting this parameter to a large number is almost
ebeccf9eecf5939a2ef772c3160e89efcad96194Lennart Poettering always a bad idea.</p>
1ddb263d21099ae42195c2bc382bdf72a7f24f82Lennart Poettering <p>This directive has no effect on Microsoft Windows.</p>
1ddb263d21099ae42195c2bc382bdf72a7f24f82Lennart Poettering <p>See also <a href="#maxspareservers">MaxSpareServers</a> and
1ddb263d21099ae42195c2bc382bdf72a7f24f82Lennart Poettering <a href="mpm_common.html#startservers">StartServers</a>.
1ddb263d21099ae42195c2bc382bdf72a7f24f82Lennart Poettering <!--#include virtual="footer.html" -->