|  | <?xml version="1.0"?> | 
|  | <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd"> | 
|  | <?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?> | 
|  | <!-- $LastChangedRevision$ --> | 
|  |  | 
|  | <!-- | 
|  | Licensed to the Apache Software Foundation (ASF) under one or more | 
|  | contributor license agreements.  See the NOTICE file distributed with | 
|  | this work for additional information regarding copyright ownership. | 
|  | The ASF licenses this file to You 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. Each server process may answer incoming | 
|  | requests, and a parent process manages the size of the server pool. | 
|  | 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">MaxRequestWorkers</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 HTTP Server | 
|  | 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 httpd 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">MaxRequestWorkers</directive> regulate how | 
|  | the parent process creates children to serve requests. In general, | 
|  | Apache httpd 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">MaxRequestWorkers</directive>, | 
|  | while sites with limited memory may need to decrease <directive | 
|  | module="mpm_common">MaxRequestWorkers</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 httpd as a less-privileged user. The <directive | 
|  | module="mod_unixd">User</directive> and <directive | 
|  | module="mod_unixd">Group</directive> directives are used to set | 
|  | the privileges of the Apache httpd 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">MaxConnectionsPerChild</directive> | 
|  | controls how frequently the server recycles processes by killing | 
|  | old ones and launching new ones.</p> | 
|  |  | 
|  | <p>This MPM uses the <code>mpm-accept</code> mutex to serialize | 
|  | access to incoming connections when subject to the thundering herd | 
|  | problem (generally, when there are multiple listening sockets). | 
|  | The implementation aspects of this mutex can be configured with the | 
|  | <directive module="core">Mutex</directive> directive.  The <a | 
|  | href="../misc/perf-tuning.html">performance hints</a> | 
|  | documentation has additional information about this mutex.</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>MaxRequestWorkers</name> | 
|  | </directivesynopsis> | 
|  | <directivesynopsis location="mpm_common"><name>MaxMemFree</name> | 
|  | </directivesynopsis> | 
|  | <directivesynopsis location="mpm_common"><name>MaxConnectionsPerChild</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="mod_unixd"><name>User</name> | 
|  | </directivesynopsis> | 
|  | <directivesynopsis location="mod_unixd"><name>Group</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 HTTP Server | 
|  | 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> | 
|  | <seealso><directive module="mpm_common">MaxSpareThreads</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: It will spawn one, wait a second, then spawn | 
|  | two, wait a second, then spawn four, and it will | 
|  | continue exponentially until it is spawning 32 children per second. It will | 
|  | stop whenever it satisfies the <directive>MinSpareServers</directive> | 
|  | setting.</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> | 
|  | <seealso><directive module="mpm_common">MinSpareThreads</directive></seealso> | 
|  | </directivesynopsis> | 
|  |  | 
|  | </modulesynopsis> | 
|  |  |