<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
<!-- $LastChangedRevision$ -->

<!--
 Copyright 2002-2005 The Apache Software Foundation or its licensors, as
 applicable.

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<modulesynopsis metafile="prefork.xml.meta">

<name>prefork</name>
<description>Implements a non-threaded, pre-forking web server</description>
<status>MPM</status>
<sourcefile>prefork.c</sourcefile>
<identifier>mpm_prefork_module</identifier>

<summary>
    <p>This Multi-Processing Module (MPM) implements a non-threaded,
    pre-forking web server that handles requests in a manner similar
    to Apache 1.3.  It 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.</p>

    <p>This MPM is very self-regulating, so it is rarely necessary to
    adjust its configuration directives.  Most important is that
    <directive module="mpm_common">MaxClients</directive> 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.</p>
</summary>
<seealso><a href="../bind.html">Setting which addresses and ports Apache
uses</a></seealso>

<section id="how-it-works"><title>How it Works</title>
    <p>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 <dfn>spare</dfn>
    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.</p>

    <p>The <directive module="mpm_common">StartServers</directive>,
    <directive module="prefork">MinSpareServers</directive>,
    <directive module="prefork">MaxSpareServers</directive>, and
    <directive module="mpm_common">MaxClients</directive> 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 <directive module="mpm_common">MaxClients</directive>,
    while sites with limited memory may need to decrease <directive
    module="mpm_common">MaxClients</directive> to keep the server from
    thrashing (swapping memory to disk and back). More information
    about tuning process creation is provided in the <a
    href="../misc/perf-tuning.html">performance hints</a>
    documentation.</p>

    <p>While the parent process is usually started as <code>root</code>
    under Unix in order to bind to port 80, the child processes are
    launched by Apache as a less-privileged user. The <directive
    module="mpm_common">User</directive> and <directive
    module="mpm_common">Group</directive> directives are used to set
    the privileges of the Apache child processes. The child processes
    must be able to read all the content that will be served, but
    should have as few privileges beyond that as possible.</p>

    <p><directive module="mpm_common">MaxRequestsPerChild</directive>
    controls how frequently the server recycles processes by killing
    old ones and launching new ones.</p>
</section>

<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>PidFile</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>Listen</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>LockFile</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>MaxClients</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ReceiveBufferSize</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ServerLimit</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>StartServers</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>User</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>Group</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>AcceptMutex</name>
</directivesynopsis>

<directivesynopsis>
<name>MaxSpareServers</name>
<description>Maximum number of idle child server processes</description>
<syntax>MaxSpareServers <var>number</var></syntax>
<default>MaxSpareServers 10</default>
<contextlist><context>server config</context></contextlist>

<usage>
    <p>The <directive>MaxSpareServers</directive> directive sets the
    desired maximum number of <em>idle</em> child server processes. An
    idle process is one which is not handling a request. If there are
    more than <directive>MaxSpareServers</directive> idle, then the
    parent process will kill off the excess processes.</p>

    <p>Tuning of this parameter should only be necessary on very
    busy sites. Setting this parameter to a large number is almost
    always a bad idea. If you are trying to set the value equal to or lower than
    <directive module="prefork">MinSpareServers</directive>, Apache
    will automatically adjust it to <directive
    >MinSpareServers</directive><code> + 1</code>.</p>
</usage>
<seealso><directive module="prefork">MinSpareServers</directive></seealso>
<seealso><directive module="mpm_common">StartServers</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>MinSpareServers</name>
<description>Minimum number of idle child server processes</description>
<syntax>MinSpareServers <var>number</var></syntax>
<default>MinSpareServers 5</default>
<contextlist><context>server config</context></contextlist>

<usage>
    <p>The <directive>MinSpareServers</directive> directive sets the
    desired minimum number of <em>idle</em> child server processes. An
    idle process is one which is not handling a request. If there are
    fewer than <directive>MinSpareServers</directive> idle, then the parent
    process creates new children at a maximum rate of 1 per second.</p>

    <p>Tuning of this parameter should only be necessary on very
    busy sites. Setting this parameter to a large number is almost
    always a bad idea.</p>
</usage>
<seealso><directive module="prefork">MaxSpareServers</directive></seealso>
<seealso><directive module="mpm_common">StartServers</directive></seealso>
</directivesynopsis>

</modulesynopsis>

