summaryrefslogtreecommitdiffstats
path: root/docs/manual
diff options
context:
space:
mode:
authorJoshua Slive <slive@apache.org>2002-02-26 20:00:40 +0100
committerJoshua Slive <slive@apache.org>2002-02-26 20:00:40 +0100
commit5fe0caf22ae8c6201cf06ff414b1bdd35d1af07e (patch)
tree616791ce9c912820f7efffc494c7bf1cb7ab075a /docs/manual
parentChanges necessary to document MPMs. (diff)
downloadapache2-5fe0caf22ae8c6201cf06ff414b1bdd35d1af07e.tar.xz
apache2-5fe0caf22ae8c6201cf06ff414b1bdd35d1af07e.zip
Start converting the mpm documentation.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93579 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'docs/manual')
-rw-r--r--docs/manual/mod/mpm_common.xml613
-rw-r--r--docs/manual/mod/prefork.xml207
2 files changed, 820 insertions, 0 deletions
diff --git a/docs/manual/mod/mpm_common.xml b/docs/manual/mod/mpm_common.xml
new file mode 100644
index 0000000000..3e3e4b7a5f
--- /dev/null
+++ b/docs/manual/mod/mpm_common.xml
@@ -0,0 +1,613 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
+<modulesynopsis>
+
+<name>mpm_common</name>
+<description>A collection of directives that are implemented by
+more than one multi-processing module (MPM)</description>
+<status>MPM</status>
+
+<directivesynopsis>
+<name>CoreDumpDirectory</name>
+<description>Sets the directory where Apache attempts to
+switch before dumping core</description>
+<syntax>CoreDumpDirectory <em>directory</em></syntax>
+<default>CoreDumpDirectory <em>ServerRoot</em></default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module><module>perchild</module>
+<module>prefork</module><module>mpm_winnt</module>
+</modulelist>
+
+<usage>
+
+ <p>This controls the directory to which Apache attempts to
+ switch before dumping core. The default is in the
+ <directive module="core">ServerRoot</directive> directory, however
+ since this should not be writable by the user the server runs
+ as, core dumps won't normally get written. If you want a core
+ dump for debugging, you can use this directive to place it in a
+ different location.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>Group</name>
+<description>Sets the group under which the server will answer
+requests</description>
+<syntax>Group <em>unix-group</em></syntax>
+<default>Group #-1</default>
+<contextlist><context>server config</context><context>virtual host</context>
+</contextlist>
+<modulelist><module>worker</module><module>perchild</module>
+<module>prefork</module></modulelist>
+
+<usage>
+ <p>The <directive>Group</directive> directive sets the group under
+ which the server will answer requests. In order to use this
+ directive, the stand-alone server must be run initially as root.
+ <em>Unix-group</em> is one of:</p>
+
+ <dl>
+ <dt>A group name</dt>
+
+ <dd>Refers to the given group by name.</dd>
+
+ <dt># followed by a group number.</dt>
+
+ <dd>Refers to a group by its number.</dd>
+ </dl>
+ <p>It is recommended that you set up a new group specifically for
+ running the server. Some admins use user <code>nobody</code>,
+ but this is not always possible or desirable.</p>
+
+ <p>Note: if you start the server as a non-root user, it will
+ fail to change to the specified group, and will instead
+ continue to run as the group of the original user.</p>
+
+ <p>Special note: Use of this directive in &lt;VirtualHost&lt; is
+ no longer supported. To implement the <a
+ href="../suexec.html">suEXEC wrapper</a> with Apache 2.0, use the
+ <directive module="mod_suexec">SuexecUserGroup</directive>
+ directive. SECURITY: See <directive
+ module="mpm_common">User</directive> for a discussion of the
+ security considerations.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>PidFile</name>
+<description>Sets the file where the server records the process ID
+of the daemon</description>
+<syntax>PidFile <em>filename</em></syntax>
+<default>PidFile logs/httpd.pid</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module><module>perchilde</module>
+<module>prefork</module><module>mpm_winnt</module>
+</modulelist>
+
+<usage>
+ <p>The <directive>PidFile</directive> directive sets the file to
+ which the server records the process id of the daemon. If the
+ filename does not begin with a slash (/) then it is assumed to be
+ relative to the <directive module="core">ServerRoot</directive>.</p>
+
+ <p>It is often useful to be able to send the server a signal,
+ so that it closes and then reopens its <directive
+ module="core">ErrorLog</directive> and TransferLog, and
+ re-reads its configuration files. This is done by sending a
+ SIGHUP (kill -1) signal to the process id listed in the
+ PidFile.</p>
+
+ <p>The PidFile is subject to the same warnings about log file
+ placement and <a
+ href="../misc/security_tips.html#serverroot">security</a>.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>Listen</name>
+<description>Sets the IP addresses and ports that the server
+listens to</description>
+<syntax>Listen [<em>IP-address</em>:]<em>portnumber</em></syntax>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module><module>perchild</module>
+<module>prefork</module><module>mpm_winnt</module>
+</modulelist>
+
+<usage>
+ <p>The <directive>Listen</directive> directive instructs Apache to
+ listen to only specific IP addresses or ports; by default it
+ responds to requests on all IP interfaces. The Listen directive is
+ now a required directive. If it is not in the config file, the
+ server will fail to start. This is a change from previous versions
+ of Apache.</p>
+
+ <p>The Listen directive tells the server to accept incoming
+ requests on the specified port or address-and-port combination.
+ If only a port number is specified, the server listens to the
+ given port on all interfaces. If an IP address is given as well
+ as a port, the server will listen on the given port and
+ interface.</p>
+
+ <p>Multiple Listen directives may be used to specify a number
+ of addresses and ports to listen to. The server will respond to
+ requests from any of the listed addresses and ports.</p>
+
+ <p>For example, to make the server accept connections on both
+ port 80 and port 8000, use:</p>
+<example>
+ Listen 80<br />
+ Listen 8000
+</example>
+ To make the server accept connections on two specified
+ interfaces and port numbers, use
+<example>
+ Listen 192.170.2.1:80<br />
+ Listen 192.170.2.5:8000
+</example>
+ IPv6 addresses must be surrounded in square brackets, as in the
+ following example:
+<example>
+ Listen [fe80::a00:20ff:fea7:ccea]:80
+</example>
+</usage>
+
+<seealso><a href="../dns-caveats.html">DNS Issues</a></seealso>
+<seealso><a href="../bind.html">Setting
+ which addresses and ports Apache uses</a></seealso>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ListenBackLog</name>
+<description>Maximum length of the queue of pending connections</description>
+<syntax>ListenBacklog <em>backlog</em></syntax>
+<default>ListenBacklog 511</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module><module>perchild</module>
+<module>prefork</module><module>mpm_winnt</module>
+</modulelist>
+
+<usage>
+ <p>The maximum length of the queue of pending connections.
+ Generally no tuning is needed or desired, however on some
+ systems it is desirable to increase this when under a TCP SYN
+ flood attack. See the backlog parameter to the
+ <code>listen(2)</code> system call.</p>
+
+ <p>This will often be limited to a smaller number by the
+ operating system. This varies from OS to OS. Also note that
+ many OSes do not use exactly what is specified as the backlog,
+ but use a number based on (but normally larger than) what is
+ set.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>LockFile</name>
+<description>Location of the accept serialization lock file</description>
+<syntax>LockFile <em>filename</em></syntax>
+<default>LockFile logs/accept.lock</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module><module>perchild</module>
+<module>prefork</module></modulelist>
+
+<usage>
+ <p>The <directive>LockFile</directive> directive sets the path to
+ the lockfile used when Apache is compiled with either
+ USE_FCNTL_SERIALIZED_ACCEPT or USE_FLOCK_SERIALIZED_ACCEPT. This
+ directive should normally be left at its default value. The main
+ reason for changing it is if the <code>logs</code> directory is
+ NFS mounted, since <strong>the lockfile must be stored on a local
+ disk</strong>. The PID of the main server process is
+ automatically appended to the filename.</p>
+
+ <p><strong>SECURITY:</strong> It is best to avoid putting this
+ file in a world writable directory such as
+ <code>/var/tmp</code> because someone could create a denial of
+ service attack and prevent the server from starting by creating
+ a lockfile with the same name as the one the server will try to
+ create.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>MaxClients</name>
+<description>Maximum number of child processes that will be created
+to serve requests</description>
+<syntax>MaxClients <em>number</em></syntax>
+<default>>MaxClients
+ 8 (with threads) MaxClients 256</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module><module>prefork</module>
+</modulelist>
+
+<usage>
+ <p>The <directive>MaxClients</directive> directive sets the limit
+ on the number of child processes that will be created to serve
+ requests. When the server is built without threading, no more than
+ this number of clients can be served simultaneously. To configure
+ more than 256 clients with the prefork MPM, you must use the
+ <directive module="mpm_common">ServerLimit</directive> directive.
+ To configure more than 1024 clients with the worker MPM, you must
+ use the <directive module="mpm_common">ServerLimit</directive> and
+ <directive module="mpm_common">ThreadLimit</directive> directives.</p>
+
+ <p>Any connection attempts over the
+ <directive>MaxClients</directive> limit will normally be queued,
+ up to a number based on the <directive module="mpm_common"
+ >ListenBacklog</directive> directive. Once a child
+ process is freed at the end of a different request, the connection
+ will then be serviced.</p>
+
+ <p>When the server is compiled with threading, then the maximum
+ number of simultaneous requests that can be served is obtained
+ from the value of this directive multiplied by
+ <directive module="mpm_common">ThreadsPerChild</directive>.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>MaxRequestPerChild</name>
+<description>Limit on the number of requests that an individual child server
+will handle during its life</description>
+<syntax>MaxRequestsPerChild <em>number</em></syntax>
+<default>MaxRequestsPerChild 10000</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module><module>perchild</module>
+<module>prefork</module><module>mpm_winnt</module>
+</modulelist>
+
+<usage>
+ <p>The <directive>MaxRequestsPerChild</directive> directive sets
+ the limit on the number of requests that an individual child
+ server process will handle. After
+ <directive>MaxRequestsPerChild</directive> requests, the child
+ process will die. If <directive>MaxRequestsPerChild</directive> is
+ 0, then the process will never expire.</p>
+
+ <p>Setting <directive>MaxRequestsPerChild</directive> to a
+ non-zero limit has two beneficial effects:</p>
+
+ <ul>
+ <li>it limits the amount of memory that process can consume
+ by (accidental) memory leakage;</li>
+
+ <li>by giving processes a finite lifetime, it helps reduce
+ the number of processes when the server load reduces.</li>
+ </ul>
+
+ <p><strong>NOTE:</strong> For <em>KeepAlive</em> requests, only
+ the first request is counted towards this limit. In effect, it
+ changes the behavior to limit the number of
+ <em>connections</em> per child.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>MaxSpareThreads</name>
+<description>Maximum number of idle threads</description>
+<syntax>MaxSpareThreads <em>number</em></syntax>
+<default>MaxSpareThreads 10 (Perchild) or 500 (worker)</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module><module>perchild</module>
+</modulelist>
+
+<usage>
+ <p>Maximum number of idle threads. Different MPMs deal with this
+ directive differently. <module>perchild</module> monitors the
+ number of idle threads on a per-child basis. If there are too many
+ idle threads in that child, the server will begin to kill threads
+ within that child.</p>
+
+ <p><module>worker</module> deals with idle threads on a
+ server-wide basis. If there are too many idle threads in the
+ server then child processes are killed until the number of idle
+ threads is less than this number.</p>
+
+</usage>
+<seealso><directive module="mpm_common">MinSpareThreads</directive></seealso>
+<seealso><directive module="mpm_common">StartServers</directive></seealso>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>MaxThreadsPerChild</name>
+<description>Maximum number of threads per child process</description>
+<syntax>MaxThreadsPerChild <em>number</em></syntax>
+<default>MaxThreadsPerChild 64</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module><module>perchild</module>
+</modulelist>
+
+<usage>
+ <p>Maximum number of threads per child. For MPMs with a
+ variable number of threads per child, this directive sets the
+ maximum number of threads that will be created in each child
+ process. To increase this value beyond its default, it is
+ necessary to change the value of the compile-time define
+ <code>HARD_THREAD_LIMIT</code> and recompile the server.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>MinSpareThreads</name>
+<description>Minimum number of idle threads available to handle request
+spikes</description>
+<syntax>MinSpareServers <em>number</em></syntax>
+<default>MinSpareThreads 5 (Perchild) or 250 (worker)</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module><module>perchild</module>
+</modulelist>
+
+<usage>
+ <p>Minimum number of idle threads to handle request spikes.
+ Different MPMs deal with this directive
+ differently. <module>perchild</module> monitors the number of idle
+ threads on a per-child basis. If there aren't enough idle threads
+ in that child, the server will begin to create new threads within
+ that child.</p>
+
+ <p><module>worker</module> deals with idle threads on a
+ server-wide basis. If there aren't enough idle threads in the
+ server then child processes are created until the number of idle
+ threads is greater than number.</p>
+</usage>
+<seealso><directive module="mpm_common">MaxSpareThreads</directive></seealso>
+<seealso><directive module="mpm_common">StartServers</directive></seealso>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>NumServers</name>
+<description>Total number of children alive at the same time</description>
+<syntax>NumServers <em>number</em></syntax>
+<default>NumServers 2</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>perchild</module></modulelist>
+
+<usage>
+ <p>Number of children alive at the same time. MPMs that use
+ this directive do not dynamically create new child processes so
+ this number should be large enough to handle the requests for
+ the entire site.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ScoreBoardFile</name>
+<description>Location of the file used to store coordination data for
+the child processes</description>
+<syntax>ScoreBoardFile <em>file-path</em></syntax>
+<default>ScoreBoardFile logs/apache_status</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module><module>perchild</module>
+<module>prefork</module></modulelist>
+
+<usage>
+ <p>The <directive>ScoreBoardFile</directive> directive is required
+ on some architectures to place a file that the server will use to
+ communicate between its children and the parent. The easiest way
+ to find out if your architecture requires a scoreboard file is to
+ run Apache and see if it creates the file named by the
+ directive. If your architecture requires it then you must ensure
+ that this file is not used at the same time by more than one
+ invocation of Apache.</p>
+
+ <p>If you have to use a <directive>ScoreBoardFile</directive> then
+ you may see improved speed by placing it on a RAM disk. But be
+ careful that you heed the same warnings about log file placement
+ and <a href="../misc/security_tips.html">security</a>.</p>
+</usage>
+<seealso><a
+ href="../stopping.html">Stopping and Restarting Apache</a></seealso>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>SendBufferSize</name>
+<description>TCP buffer size</description>
+<syntax>SendBufferSize <em>bytes</em></syntax>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module><module>perchild</module>
+<module>prefork</module><module>mpm_winnt</module>
+</modulelist>
+
+<usage>
+ <p>The server will set the TCP buffer size to the number of bytes
+ specified. Very useful to increase past standard OS defaults on
+ high speed high latency (<em>i.e.</em>, 100ms or so, such as
+ transcontinental fast pipes).</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ServerLimit</name>
+<description>Upper limit on configurable number of processes</description>
+<syntax>ServerLimit <em>number</em></syntax>
+<default>ServerLimit 256 (prefork), ServerLimit 16 (worker)</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module><module>prefork</module>
+</modulelist>
+
+<usage>
+ <p>For the <module>prefork</module> MPM, this directive sets the
+ maximum configured value for <directive
+ module="mpm_common">MaxClients</directive> for the lifetime of the
+ Apache process. For the worker MPM, this directive in combination
+ with <directive module="mpm_common">ThreadLimit</directive> sets
+ the maximum configured value for <directive
+ module="mpm_common">MaxClients</directive> for the lifetime of the
+ Apache process. Any attempts to change this directive during a
+ restart will be ignored, but <directive
+ module="mpm_common">MaxClients</directive> can be modified during
+ a restart.</p>
+
+ <p>Special care must be taken when using this directive. If
+ <directive>ServerLimit</directive> is set to a value much higher
+ than necessary, extra, unused shared memory will be allocated. If
+ both <directive>ServerLimit</directive> and <directive
+ module="mpm_common">MaxClients</directive> are set to values
+ higher than the system can handle, Apache may not start or the
+ system may become unstable.</p>
+
+ <p>With the <module>prefork</module> MPM, use this directive only
+ if you need to set <directive
+ module="mpm_common">MaxClients</directive> higher higher than 256.
+ Do not set the value of this directive any higher than what you
+ might want to set <directive
+ module="mpm_common">MaxClients</directive> to.</p>
+
+ <p>With the <module>worker</module> MPM, use this directive only
+ if your <directive module="mpm_common">MaxClients</directive> and
+ <directive module="mpm_common">ThreadsPerChild</directive>
+ settings require more than 16 server processes. Do not set the
+ value of this directive any higher than the number of server
+ processes required by what you may want for <directive
+ module="mpm_common">MaxClients </directive> and <directive
+ module="mpm_common">ThreadsPerChild</directive>.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>StartServers</name>
+<description>Number of child server processes created at startup</description>
+<syntax>StartServers <em>number</em></syntax>
+<default>StartServers 5</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module></modulelist>
+
+<usage>
+ <p>The <directive>StartServers</directive> directive sets the
+ number of child server processes created on startup. As the number
+ of processes is dynamically controlled depending on the load,
+ there is usually little reason to adjust this parameter.</p>
+</usage>
+<seealso><directive module="mpm_common">MinSpareThreads</directive></seealso>
+<seealso><directive module="mpm_common">MaxSpareThreads</directive></seealso>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>StartThreads</name>
+<description>Nubmer of threads each child creates on startup</description>
+<syntax>StartThreads <em>number</em></syntax>
+<default>StartThreads 5</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>perchild</module></modulelist>
+
+<usage>
+ <p>Number of threads each child creates on startup. As the
+ number of threads is dynamically controlled depending on the
+ load, there is usually little reason to adjust this
+ parameter.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ThreadLimit</name>
+<description>Sets the upper limit on the configurable number of threads
+per child process</description>
+<syntax>ThreadLimit <em>number</em></syntax>
+<default>ThreadLimit 64</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module></modulelist>
+
+<usage>
+ <p>This directive sets the maximum configured value for <directive
+ module="mpm_common">ThreadsPerChild</directive> for the lifetime
+ of the Apache process. Any attempts to change this directive
+ during a restart will be ignored, but <directive
+ module="mpm_common">ThreadsPerChild</directive> can be modified
+ during a restart up to the value of this directive.</p>
+
+ <p>Special care must be taken when using this directive. If
+ <directive>ThreadLimit</directive> is set to a value much higher
+ than <directive module="mpm_common">ThreadsPerChild</directive>,
+ extra unused shared memory will be allocated. If both
+ <directive>ThreadLimit</directive> and <directive
+ module="mpm_common">ThreadsPerChild</directive> are set to values
+ higher than the system can handle, Apache may not start or the
+ system may become unstable.</p>
+
+ <p>Use this directive only if you need to set <directive
+ module="mpm_common">ThreadsPerChild</directive> higher than 64. Do
+ not set the value of this directive any higher than what you might
+ want to set <directive
+ module="mpm_common">ThreadsPerChild</directive> to.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ThreadsPerChild</name>
+<description>Number of threads created by each child process</description>
+<syntax>ThreadsPerChild <em>number</em></syntax>
+<default>ThreadsPerChild 50</default>
+<contextlist><context>server config</context></contextlist>
+<modulelist><module>worker</module><module>mpm_winnt</module>
+</modulelist>
+
+<usage>
+ <p>This directive sets the number of threads created by each
+ child process. The child creates these threads at startup and
+ never creates more. if using an MPM like mpmt_winnt, where
+ there is only one child process, this number should be high
+ enough to handle the entire load of the server. If using an MPM
+ like worker, where there are multiple child processes, the
+ total number of threads should be high enough to handle the
+ common load on the server.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>User</name>
+<description>The userid under which the server will answer
+requests</description>
+<syntax>User <em>unix-userid</em></syntax>
+<default>User #-1</default>
+<contextlist><context>server config</context><context>virtual host</context>
+</contextlist>
+<modulelist><module>worker</module><module>perchild</module>
+<module>prefork</module></modulelist>
+
+<usage>
+ <p>The <directive>User</directive> directive sets the userid as
+ which the server will answer requests. In order to use this
+ directive, the standalone server must be run initially as
+ root. <em>Unix-userid</em> is one of:</p>
+
+ <dl>
+ <dt>A username</dt>
+
+ <dd>Refers to the given user by name.</dd>
+
+ <dt># followed by a user number.</dt>
+
+ <dd>Refers to a user by their number.</dd>
+ </dl>
+
+ <p>The user should have no privileges which result in it being
+ able to access files which are not intended to be visible to the
+ outside world, and similarly, the user should not be able to
+ execute code which is not meant for httpd requests. It is
+ recommended that you set up a new user and group specifically for
+ running the server. Some admins use user <code>nobody</code>, but
+ this is not always possible or desirable. For example
+ <module>mod_proxy</module>'s cache, when enabled, must be
+ accessible to this user (see <directive
+ module="mod_proxy">CacheRoot</directive>).</p>
+
+ <p>Notes: If you start the server as a non-root user, it will
+ fail to change to the lesser privileged user, and will instead
+ continue to run as that original user. If you do start the
+ server as root, then it is normal for the parent process to
+ remain running as root.</p>
+
+ <p>Special note: Use of this directive in <directive module="core"
+ type="section">VirtualHost</directive> is no longer supported. To
+ configure your server for <a href="mod_suexec.html">suexec</a> use
+ <directive module="mod_suexec">SuexecUserGroup</directive>.</p>
+
+<note><title>Security</title> <p>Don't set <directive>User</directive>
+(or <directive module="mpm_common">Group</directive>) to
+<code>root</code> unless you know exactly what you are doing, and what
+the dangers are.</p></note>
+</usage>
+</directivesynopsis>
+
+</modulesynopsis> \ No newline at end of file
diff --git a/docs/manual/mod/prefork.xml b/docs/manual/mod/prefork.xml
new file mode 100644
index 0000000000..1dd788813b
--- /dev/null
+++ b/docs/manual/mod/prefork.xml
@@ -0,0 +1,207 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
+<modulesynopsis>
+<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 which handles request in a
+ manner very similar to the default behavior of Apache 1.3 on
+ Unix.</p>
+
+ <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>
+ 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 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
+ 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>
+
+ <p><directive module="mpm_common">MaxRequestsPerChild</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>
+
+<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>MaxRequestsPerChild</name>
+</directivesynopsis>
+
+<directivesynopsis location="mpm_common">
+<name>MaxSpareServers</name>
+</directivesynopsis>
+
+<directivesynopsis location="mpm_common">
+<name>MinSpareServers</name>
+</directivesynopsis>
+
+<directivesynopsis location="mpm_common">
+<name>ScoreBoardFile</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>
+<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>
+
+<directivesynopsis>
+<name>MaxSpareServers</name>
+<description>Maximum number of idle child server processes</description>
+<syntax>MaxSpareServers <em>number</em><br /></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 MaxSpareServers 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>
+</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 <em>number</em></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>
+
+ <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>
+</directivesynopsis>
+
+</modulesynopsis>
+