blob: 0d00ff7cabe8c5e429559215ca5a84ba0b9d667e [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>Apache MPM threaded</TITLE>
</HEAD>
<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
<BODY
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#000080"
ALINK="#FF0000"
>
<!--#include virtual="header.html" -->
<H1 ALIGN="CENTER">Multi-Processing Module threaded</H1>
<P>
This Multi-Processing Module implements a hybrid multi-threaded
multi-process web server.
</P>
<P><A
HREF="module-dict.html#Status"
REL="Help"
><STRONG>Status:</STRONG></A> MPM
<BR>
<A
HREF="module-dict.html#SourceFile"
REL="Help"
><STRONG>Source File:</STRONG></A> threaded.c
<BR>
<A
HREF="module-dict.html#ModuleIdentifier"
REL="Help"
><STRONG>Module Identifier:</STRONG></A> mpm_threaded_module
</P>
<H2>Summary</H2>
<p>This Multi-Processing Module (MPM) is the default for most unix-like
operating systems. It implements a hybrid
multi-process multi-threaded server. Each process has a fixed number
of threads. The server adjusts to handle load by increasing or
decreasing the number of processes.</p>
<p>A single control process is responsible for launching child
processes. Each child process creates a fixed number of threads as
specified in the <code>ThreadsPerChild</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 a new threads or processes to be
created before their requests can be served. Apache assesses the
total number of idle threads in all processes, and forks or kills
processes 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 maximum number of server processes that
will be created (<code>MaxClients</code>) by the number of threads
created in each process (<code>ThreadsPerChild</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>
<UL>
<li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
<li><a href="mpm_common.html#group">Group</a></li>
<li><a href="mpm_common.html#pidfile">PidFile</a></li>
<li><a href="mpm_common.html#listen">Listen</a></li>
<li><a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
<li><a href="mpm_common.html#lockfile">LockFile</a></li>
<li><a href="mpm_common.html#maxclients">MaxClients</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#minsparethreads">MinSpareThreads</a></li>
<li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
<li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
<li><a href="mpm_common.html#startservers">StartServers</a></li>
<li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
<li><a href="mpm_common.html#user">User</a></li>
</UL>
<!--#include virtual="footer.html" -->
</BODY>
</HTML>