]> granicus.if.org Git - apache/blobdiff - docs/manual/mod/prefork.xml
Merge in APR[-util] macros from branches/trunk-buildconf-noapr
[apache] / docs / manual / mod / prefork.xml
index 1dd788813bd1b5c0e26f6a12f5c9530171638f83..715b581a2ccdda64e3b8ab9d5bd95620538a7217 100644 (file)
@@ -1,6 +1,27 @@
 <?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
-<modulesynopsis>
+<!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>
 <identifier>mpm_prefork_module</identifier>
 
 <summary>
-    <p>This Multi-Processing Module (MPM) implements a
-    non-threaded, pre-forking web server which handles request in a
-    manner very similar to the default behavior of Apache 1.3 on
-    Unix.</p>
+    <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 always tries to maintain several <em>spare</em>
+    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
     <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
+    <directive module="mpm_common">MaxRequestWorkers</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
+    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">MaxClients</directive>,
+    increase <directive module="mpm_common">MaxRequestWorkers</directive>,
     while sites with limited memory may need to decrease <directive
-    module="mpm_common">MaxClients</directive> to keep the server from
+    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 root 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
+    <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. In
-    addition, unless <a href="../suexec.html">suexec</a> is used,
-    these directives also set the privileges which will be inherited
-    by CGI scripts.</p>
+    should have as few privileges beyond that as possible.</p>
 
-    <p><directive module="mpm_common">MaxRequestsPerChild</directive>
+    <p><directive module="mpm_common">MaxConnectionsPerChild</directive>
     controls how frequently the server recycles processes by killing
     old ones and launching new ones.</p>
-</summary>
-<seealso><a href="../bind.html">Setting which addresses and
-    ports Apache uses</a></seealso>
 
-<directivesynopsis location="mpm_common">
-<name>CoreDumpDirectory</name>
-</directivesynopsis>
+    <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>PidFile</name>
+<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
 </directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>Listen</name>
+<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
 </directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>ListenBacklog</name>
+<directivesynopsis location="mpm_common"><name>PidFile</name>
 </directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>LockFile</name>
+<directivesynopsis location="mpm_common"><name>Listen</name>
 </directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>MaxRequestsPerChild</name>
+<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
 </directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>MaxSpareServers</name>
+<directivesynopsis location="mpm_common"><name>MaxRequestWorkers</name>
 </directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>MinSpareServers</name>
+<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
 </directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>ScoreBoardFile</name>
+<directivesynopsis location="mpm_common"><name>MaxConnectionsPerChild</name>
 </directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>SendBufferSize</name>
+<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
 </directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>ServerLimit</name>
+<directivesynopsis location="mpm_common"><name>ReceiveBufferSize</name>
 </directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>StartServers</name>
+<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
 </directivesynopsis>
-
-<directivesynopsis location="mpm_common">
-<name>User</name>
+<directivesynopsis location="mpm_common"><name>ServerLimit</name>
 </directivesynopsis>
-
-<directivesynopsis>
-<name>AcceptMutex</name>
-<description>Method that Apache uses to serialize multiple children
-accepting requests on network sockets</description>
-<syntax>AcceptMutex default|<em>method</em></syntax>
-<default>AcceptMutex default</default>
-<contextlist><context>server config</context></contextlist>
-
-<usage>
-    <p>The <directive>AcceptMutex</directive> directives sets the
-    method that Apache uses to serialize multiple children accepting
-    requests on network sockets. Prior to Apache 2.0, the method was
-    selectable only at compile time. The optimal method to use is
-    highly architecture and platform dependent. For further details,
-    see the <a href="../misc/perf-tuning.html">performance tuning</a>
-    documentation.</p>
-
-    <p>If this directive is set to <code>default</code>, then the
-    compile-time selected default will be used. Other possible
-    methods are listed below. Note that not all methods are
-    available on all platforms. If a method is specified which is
-    not available, a message will be written to the error log
-    listing the available methods.</p>
-
-    <dl>
-      <dt><code>flock</code></dt>
-
-      <dd>uses the <code>flock(2)</code> system call to lock the
-      file defined by the <directive module="mpm_common"
-      >LockFile</directive> directive.</dd>
-
-      <dt><code>fcntl</code></dt>
-
-      <dd>uses the <code>fnctl(2)</code> system call to lock the
-      file defined by the <directive module="mpm_common"
-      >LockFile</directive> directive.</dd>
-
-      <dt><code>sysvsem</code></dt>
-
-      <dd>uses SySV-style semaphores to implement the mutex.</dd>
-
-      <dt><code>pthread</code></dt>
-
-      <dd>uses POSIX mutexes as implemented by the POSIX Threads
-      (PThreads) specification.</dd>
-    </dl>
-</usage>
+<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 <em>number</em><br /></syntax>
+<syntax>MaxSpareServers <var>number</var></syntax>
 <default>MaxSpareServers 10</default>
 <contextlist><context>server config</context></contextlist>
 
@@ -168,39 +136,46 @@ accepting requests on network sockets</description>
     <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 MaxSpareServers idle, then the parent process will kill
-    off the excess processes.</p>
+    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.</p>
+    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 <em>number</em></syntax>
-<default>MinSpareServers  5</default>
+<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 MinSpareServers idle, then the parent process creates
-    new children at a maximum rate of 1 per second.</p>
+    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>
-
-    <p>This directive has no effect on Microsoft Windows.</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>