perchild.html revision 8e7c85d6eb9bf628f081763c5bd778b784d5001c
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng BGCOLOR="#FFFFFF"
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng TEXT="#000000"
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng LINK="#0000FF"
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng VLINK="#000080"
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng ALINK="#FF0000"
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<!--#include virtual="header.html" -->
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<H1 ALIGN="CENTER">Multi-Processing Module perchild</H1>
da14cebe459d3275048785f25bd869cb09b5307fEric ChengThis Multi-Processing Module allows for daemon processes serving requests
da14cebe459d3275048785f25bd869cb09b5307fEric Chengto be assigned a variety of different userids.
da14cebe459d3275048785f25bd869cb09b5307fEric ChengHREF="module-dict.html#SourceFile"
da14cebe459d3275048785f25bd869cb09b5307fEric ChengHREF="module-dict.html#ModuleIdentifier"
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer><STRONG>Module Identifier:</STRONG></A> mpm_perchild_module
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<p>This Multi-Processing Module (MPM) implements a hybrid
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyermulti-process, multi-threaded web server. A fixed number of processes
da14cebe459d3275048785f25bd869cb09b5307fEric Chengcreate threads to handle requests. Fluctuations in load are handled
da14cebe459d3275048785f25bd869cb09b5307fEric Chengby increasing or decreasing the number of threads in each process.</p>
2b24ab6b3865caeede9eeb9db6b83e1d89dcd1eaSebastien Roy<p>A single control process launches the number of child processes
da14cebe459d3275048785f25bd869cb09b5307fEric Chengindicated by the <code>NumServers</code> directive at server startup.
da14cebe459d3275048785f25bd869cb09b5307fEric ChengEach child process creates threads as specified in the
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<code>StartThreads</code> directive. The individual threads then
da14cebe459d3275048785f25bd869cb09b5307fEric Chenglisten for connections and serve them when they arrive.</p>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<p>Apache always tries to maintain a pool of <em>spare</em> or idle
da14cebe459d3275048785f25bd869cb09b5307fEric Chengserver threads, which stand ready to serve incoming requests. In this
da14cebe459d3275048785f25bd869cb09b5307fEric Chengway, clients do not need to wait for new threads to be created. For
da14cebe459d3275048785f25bd869cb09b5307fEric Chengeach child process, Apache assesses the number of idle threads and
da14cebe459d3275048785f25bd869cb09b5307fEric Chengcreates or destroys threads to keep this number within the boundaries
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<code>MaxSpareThreads</code>. Since this process is very
da14cebe459d3275048785f25bd869cb09b5307fEric Chengself-regulating, it is rarely necessary to modify these directives
da14cebe459d3275048785f25bd869cb09b5307fEric Chengfrom their default values. The maximum number of clients that may be
da14cebe459d3275048785f25bd869cb09b5307fEric Chengserved simultaneously is determined by multiplying the number
da14cebe459d3275048785f25bd869cb09b5307fEric Chengof server processes that will be created (<code>NumServers</code>) by
da14cebe459d3275048785f25bd869cb09b5307fEric Chengthe maximum number of threads created in each process
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<p>While the parent process is usually started as root under Unix in
da14cebe459d3275048785f25bd869cb09b5307fEric Chengorder to bind to port 80, the child processes and threads are launched
da14cebe459d3275048785f25bd869cb09b5307fEric Chengby Apache as a less-privileged user. The <code>User</code> and
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<code>Group</code> directives are used to set the privileges of the
da14cebe459d3275048785f25bd869cb09b5307fEric ChengApache child processes. The child processes must be able to read all
da14cebe459d3275048785f25bd869cb09b5307fEric Chengthe content that will be served, but should have as few privileges
da14cebe459d3275048785f25bd869cb09b5307fEric Chengbeyond that as possible. In addition, unless <a
da14cebe459d3275048785f25bd869cb09b5307fEric Chenghref="/suexec.html">suexec</a> is used, these directives also set
da14cebe459d3275048785f25bd869cb09b5307fEric Chengthe privileges which will be inherited by CGI scripts.</p>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<p><code>MaxRequestsPerChild</code> controls how frequently the server
da14cebe459d3275048785f25bd869cb09b5307fEric Chengrecycles processes by killing old ones and launching new ones.</p>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<p>See also: <a href="/bind.html">Setting which addresses and ports
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<p>In addition it adds the extra ability to specify that specific processes
da14cebe459d3275048785f25bd869cb09b5307fEric Chengshould serve requests under different userids. These processes can
da14cebe459d3275048785f25bd869cb09b5307fEric Chengthen be associated with specific virtual hosts.</p>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<!-- XXX: This desperately needs more explanation. -->
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="#childperuserid">ChildPerUserID</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#connectionstatus">ConnectionStatus</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#group">Group</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#pidfile">PidFile</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#listen">Listen</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#lockfile">LockFile</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#maxthreadsperchild">MaxThreadsPerChild</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#numservers">NumServers</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<li><a href="mpm_common.html#startthreads">StartThreads</a></li>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<H2><A NAME="assignuserid">AssignUserID directive</A></H2>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<p>Tie a virtual host to a specific child process.</p>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<H2><A NAME="childperuserid">ChilePerUserID directive</A></H2>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng<p>Specify a User and Group for a specific child process.</p>
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer<!--#include virtual="footer.html" -->