<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
-<TITLE>Apache MPM mpmt_pthread</TITLE>
+<TITLE>Apache MPM dexter</TITLE>
</HEAD>
<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
>
<!--#include virtual="header.html" -->
-<H1 ALIGN="CENTER">Multi-Processing Module mpmt_pthread</H1>
+<H1 ALIGN="CENTER">Multi-Processing Module dexter</H1>
<P>
-This Multi-Processing Module controls process and thread creation
-using the pthread interface.
+This Multi-Processing Module implements a hybrid multi-process
+multi-threaded web server with a variable number of threads per
+process.
</P>
<P><A
<H2>Summary</H2>
-<p>This Multi-Processing Module (MPM) is the default for most
-unix-like operating systems. It uses pthread system calls to create a
-hybrid multi-process multi-threaded server. The server starts a fixed
-number of processes. The server adjusts to handle load by increasing
-or decreasing the number of threads.</p>
+<p>This Multi-Processing Module (MPM) implements a hybrid
+multi-process, multi-threaded web server. A fixed number of processes
+create threads to handle requests. Fluctuations in load are handled
+by increasing or decreasing the number of threads in each process.</p>
+
+<p>A single control process launches the number of child processes
+indicated by the <code>NumServers</code> directive at server startup.
+Each child process creates threads as specified in the
+<code>StartThreads</code> directive. The individual threads then
+listen for connections and serve them when they arrive.</p>
+
+<p>Apache always tries to maintain a pool of <em>spare</em> or idle
+server threads, which stand ready to serve incoming requests. In this
+way, clients do not need to wait for new threads to be created. For
+each child process, Apache assesses the number of idle threads and
+creates or destroys threads to keep this number within the boundaries
+specified by <code>MinSpareThreads</code> and
+<code>MaxSpareThreads</code>. Since this process is very
+self-regulating, it is rarely necessary to modify these directives
+from their default values. The maximum number of clients that may be
+served simultaneously is determined by multiplying the number
+of server processes that will be created (<code>NumServers</code>) by
+the maximum number of threads created in each process
+(<code>MaxThreadsPerChild</code>).</p>
+
+<p>While the parent process is usually started as root under Unix in
+order to bind to port 80, the child processes and threads are launched
+by Apache as a less-privileged user. The <code>User</code> and
+<code>Group</code> 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><code>MaxRequestsPerChild</code> controls how frequently the server
+recycles processes by killing old ones and launching new ones.</p>
+
+<p>See also: <a href="../bind.html">Setting which addresses and ports
+Apache uses</a>.</p>
+
<H2>Directives</H2>
<li><a href="mpm_common.html#lockfile">LockFile</a></li>
<li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
<li><a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
+<li><a href="mpm_common.html#maxthreadsperchild">MaxThreadsPerChild</a></li>
<li><a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
<li><a href="mpm_common.html#numservers">NumServers</a></li>
<li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
<li><a href="#maxclients">MaxClients</a></li>
<li><a href="#maxrequestsperchild">MaxRequestsPerChild</a></li>
<li><a href="#maxsparethreads">MaxSpareThreads</a></li>
+<li><a href="#maxthreadsperchild">MaxThreadsPerChild</a></li>
<li><a href="#minsparethreads">MinSpareThreads</a></li>
<li><a href="#numservers">NumServers</a></li>
<li><a href="#scoreboardfile">ScoreBoardFile</a></li>
<H2><A NAME="maxsparethreads">MaxSpareThreads directive</A></H2>
-<!--%plaintext <?INDEX {\tt MaxSpareServers} directive> -->
<p><A
HREF="directive-dict.html#Syntax"
REL="Help"
<P><HR>
+<H2><A NAME="maxthreadsperchild">MaxThreadsPerChild directive</A></H2>
+<p><A
+ HREF="directive-dict.html#Syntax"
+ REL="Help"
+><STRONG>Syntax:</STRONG></A> MaxThreadsPerChild <EM>number</EM><BR>
+<A
+ HREF="directive-dict.html#Default"
+ REL="Help"
+><STRONG>Default:</STRONG></A> <CODE>MaxThreadsPerChild 64</code>
+<A
+ HREF="directive-dict.html#Context"
+ REL="Help"
+><STRONG>Context:</STRONG></A> server config<BR>
+<A
+ HREF="directive-dict.html#Status"
+ REL="Help"
+><STRONG>Status:</STRONG></A> core<BR>
+<A
+ HREF="directive-dict.html#Module"
+ REL="Help"
+><STRONG>Module:</STRONG></A> mpmt_pthread, perchild</p>
+
+<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 to change the value of
+the compile-time define <code>HARD_THREAD_LIMIT</code> and recompile
+the server.</p>
+
+<P><HR>
+
<H2><A NAME="minsparethreads">MinSpareThreads directive</A></H2>
<!--%plaintext <?INDEX {\tt MinSpareServers} directive> -->
<p><A
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
-<TITLE>Apache MPM mpmt_pthread</TITLE>
+<TITLE>Apache MPM perchild</TITLE>
</HEAD>
<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
<H2>Summary</H2>
-<p>Some description on how this whole thing works with a couple examples.</p>
+<p>This module creates and controls processes and threads in a manner
+identical to <a href="dexter.html">dexter</a>. However, it adds
+the extra ability to specify that specific processes should serve
+requests under different userids. These processes can then be
+associated with specific virtual hosts.</p>
+
+<!-- XXX: This desperately needs more explanation. -->
<H2>Directives</H2>
<li><a href="mpm_common.html#lockfile">LockFile</a></li>
<li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
<li><a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
+<li><a href="mpm_common.html#maxthreadsperchild">MaxThreadsPerChild</a></li>
<li><a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
<li><a href="mpm_common.html#numservers">NumServers</a></li>
<li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>