mirror of
https://github.com/apache/httpd.git
synced 2025-08-26 05:42:34 +03:00
to follow on apache-docs. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@86997 13f79535-47bb-0310-9956-ffa450edef68
435 lines
13 KiB
HTML
435 lines
13 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
|
<HTML>
|
|
<HEAD>
|
|
<TITLE>Apache MPM mpmt_pthread</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">Mulit-Processing Module mpmt_pthread</H1>
|
|
<P>
|
|
This Multi-Processing Module controls process and thread creation
|
|
using the pthread interface.
|
|
</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> mpmt_pthread.c
|
|
<BR>
|
|
<A
|
|
HREF="module-dict.html#ModuleIdentifier"
|
|
REL="Help"
|
|
><STRONG>Module Identifier:</STRONG></A> mpm_mpmt_pthread_module
|
|
</P>
|
|
|
|
<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. Each process has a fixed number
|
|
of threads. The server adjusts to handle load by increasing or
|
|
decreasing the number of processes.</p>
|
|
|
|
|
|
<H2>Directives</H2>
|
|
<UL>
|
|
<li><a href="#coredumpdirectory">CoreDumpDirectory</a></li>
|
|
<li><a href="#pidfile">PidFile</a></li>
|
|
<li><a href="#lockfile">LockFile</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="#minsparethreads">MinSpareThreads</a></li>
|
|
<li><a href="#scoreboardfile">ScoreBoardFile</a></li>
|
|
<li><a href="#startservers">StartServers</a></li>
|
|
<li><a href="#threadsperchild">ThreadsPerChild</a></li>
|
|
</UL>
|
|
<HR>
|
|
|
|
<H2><A NAME="coredumpdirectory">CoreDumpDirectory directive</A></H2>
|
|
<!--%plaintext <?INDEX {\tt CoreDumpDirectory} directive> -->
|
|
<p><A
|
|
HREF="directive-dict.html#Syntax"
|
|
REL="Help"
|
|
><STRONG>Syntax:</STRONG></A> CoreDumpDirectory <EM>directory</EM><BR>
|
|
<A
|
|
HREF="directive-dict.html#Default"
|
|
REL="Help"
|
|
><STRONG>Default:</STRONG></A> the same location as ServerRoot<BR>
|
|
<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> Base<BR>
|
|
<A
|
|
HREF="directive-dict.html#Module"
|
|
REL="Help"
|
|
><STRONG>Module:</STRONG></A> mpmt_pthread</p>
|
|
|
|
<p>This controls the directory to which Apache attempts to switch
|
|
before dumping core. The default is in the <A
|
|
HREF="core.html#serverroot">ServerRoot</A> 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><HR>
|
|
|
|
<H2><A NAME="pidfile">PidFile directive</A></H2>
|
|
<!--%plaintext <?INDEX {\tt PidFile} directive> -->
|
|
<p><A
|
|
HREF="directive-dict.html#Syntax"
|
|
REL="Help"
|
|
><STRONG>Syntax:</STRONG></A> PidFile <EM>filename</EM><BR>
|
|
<A
|
|
HREF="directive-dict.html#Default"
|
|
REL="Help"
|
|
><STRONG>Default:</STRONG></A> <CODE>PidFile logs/httpd.pid</CODE><BR>
|
|
<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> Base<BR>
|
|
<A
|
|
HREF="directive-dict.html#Module"
|
|
REL="Help"
|
|
><STRONG>Module:</STRONG></A> mpmt_pthread</p>
|
|
|
|
<p>The PidFile 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 <A
|
|
HREF="core.html#serverroot">ServerRoot</A>.</p>
|
|
|
|
<p>It is often useful to be able to send the server a signal, so that
|
|
it closes and then reopens its <A
|
|
HREF="core.html#errorlog">ErrorLog</A> 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>
|
|
|
|
|
|
<P><HR>
|
|
|
|
|
|
<H2><A NAME="lockfile">LockFile directive</A></H2>
|
|
<p><A
|
|
HREF="directive-dict.html#Syntax"
|
|
REL="Help"
|
|
><STRONG>Syntax:</STRONG></A> LockFile <EM>filename</EM><BR>
|
|
<A
|
|
HREF="directive-dict.html#Default"
|
|
REL="Help"
|
|
><STRONG>Default:</STRONG></A> <CODE>LockFile logs/accept.lock</CODE><BR>
|
|
<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> Base<BR>
|
|
<A
|
|
HREF="directive-dict.html#Module"
|
|
REL="Help"
|
|
><STRONG>Module:</STRONG></A> mpmt_pthread</p>
|
|
|
|
<p>The LockFile 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>
|
|
|
|
<hr>
|
|
|
|
<H2><A NAME="maxclients">MaxClients directive</A></H2>
|
|
<!--%plaintext <?INDEX {\tt MaxClients} directive> -->
|
|
<p><A
|
|
HREF="directive-dict.html#Syntax"
|
|
REL="Help"
|
|
><STRONG>Syntax:</STRONG></A> MaxClients <EM>number</EM><BR>
|
|
<A
|
|
HREF="directive-dict.html#Default"
|
|
REL="Help"
|
|
><STRONG>Default:</STRONG></A> <CODE>MaxClients 8</code> (with threads)
|
|
<code>MaxClients 256</code> (no threads)<BR>
|
|
<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</p>
|
|
|
|
<P>The MaxClients 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, you must
|
|
edit the <code>HARD_SERVER_LIMIT</code> entry in
|
|
<code>mpm_default.h</code> and recompile.
|
|
|
|
<P>Any connection attempts over the MaxClients limit will normally
|
|
be queued, up to a number based on the <A HREF="#listenbacklog">
|
|
ListenBacklog</A> 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 <a
|
|
href="#threadsperchild">ThreadsPerChild</a>.</p>
|
|
|
|
<HR>
|
|
|
|
<H2><A NAME="maxrequestsperchild">MaxRequestsPerChild directive</A></H2>
|
|
<!--%plaintext <?INDEX {\tt MaxRequestsPerChild} directive> -->
|
|
<p><A
|
|
HREF="directive-dict.html#Syntax"
|
|
REL="Help"
|
|
><STRONG>Syntax:</STRONG></A> MaxRequestsPerChild <EM>number</EM><BR>
|
|
<A
|
|
HREF="directive-dict.html#Default"
|
|
REL="Help"
|
|
><STRONG>Default:</STRONG></A> <CODE>MaxRequestsPerChild 10000</CODE><BR>
|
|
<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</p>
|
|
|
|
<p>The MaxRequestsPerChild directive sets the limit on the number of requests
|
|
that an individual child server process will handle. After MaxRequestsPerChild
|
|
requests, the child process will die. If MaxRequestsPerChild is 0, then
|
|
the process will never expire.<P>
|
|
|
|
Setting MaxRequestsPerChild to a non-zero limit has two beneficial effects:
|
|
<UL>
|
|
<LI>it limits the amount of memory that process can consume by (accidental)
|
|
memory leakage;
|
|
<LI> by giving processes a finite lifetime, it helps reduce the
|
|
number of processes when the server load reduces.
|
|
</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><HR>
|
|
|
|
|
|
<H2><A NAME="maxsparethreads">MaxSpareThreads directive</A></H2>
|
|
<!--%plaintext <?INDEX {\tt MaxSpareServers} directive> -->
|
|
<p><A
|
|
HREF="directive-dict.html#Syntax"
|
|
REL="Help"
|
|
><STRONG>Syntax:</STRONG></A> MaxSpareThreads <EM>number</EM><BR>
|
|
<A
|
|
HREF="directive-dict.html#Default"
|
|
REL="Help"
|
|
><STRONG>Default:</STRONG></A> <CODE>MaxSpareThreads ??</CODE><BR>
|
|
<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</p>
|
|
|
|
<P>Content needed here!</p>
|
|
|
|
<p>See also <A HREF="#minsparethreads">MinSpareThreads</A> and
|
|
<A HREF="#startservers">StartServers</A>.
|
|
|
|
<P><HR>
|
|
|
|
<H2><A NAME="minsparethreads">MinSpareThreads directive</A></H2>
|
|
<!--%plaintext <?INDEX {\tt MinSpareServers} directive> -->
|
|
<p><A
|
|
HREF="directive-dict.html#Syntax"
|
|
REL="Help"
|
|
><STRONG>Syntax:</STRONG></A> MinSpareServers <EM>number</EM><BR>
|
|
<A
|
|
HREF="directive-dict.html#Default"
|
|
REL="Help"
|
|
><STRONG>Default:</STRONG></A> <CODE>MinSpareServers ???</CODE><BR>
|
|
<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</p>
|
|
|
|
<p><strong>fix me</strong></p>
|
|
|
|
<p>The MinSpareServers 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>
|
|
|
|
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>
|
|
|
|
This directive has no effect on Microsoft Windows.
|
|
|
|
<P>
|
|
|
|
See also <A HREF="#maxsparethreads">MaxSpareThreads</A> and
|
|
<A HREF="#startservers">StartServers</A>.<P><HR>
|
|
|
|
|
|
<H2><A NAME="scoreboardfile">ScoreBoardFile directive</A></H2>
|
|
<!--%plaintext <?INDEX {\tt ScoreBoardFile} directive> -->
|
|
<p><A
|
|
HREF="directive-dict.html#Syntax"
|
|
REL="Help"
|
|
><STRONG>Syntax:</STRONG></A> ScoreBoardFile <EM>filename</EM><BR>
|
|
<A
|
|
HREF="directive-dict.html#Default"
|
|
REL="Help"
|
|
><STRONG>Default:</STRONG></A> <CODE>ScoreBoardFile logs/apache_status</CODE>
|
|
<BR>
|
|
<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> Base<BR>
|
|
<A
|
|
HREF="directive-dict.html#Compatibility"
|
|
REL="Help"
|
|
>
|
|
<A
|
|
HREF="directive-dict.html#Module"
|
|
REL="Help"
|
|
><STRONG>Module:</STRONG></A> mpmt_pthread</p>
|
|
|
|
<p>The ScoreBoardFile 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 ScoreBoardFile 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>
|
|
|
|
<p><STRONG>See Also</STRONG>:
|
|
<A HREF="../stopping.html">Stopping and Restarting Apache</A></P>
|
|
|
|
|
|
<P><HR>
|
|
|
|
<H2><A NAME="startservers">StartServers directive</A></H2>
|
|
<!--%plaintext <?INDEX {\tt StartServers} directive> -->
|
|
<p><A
|
|
HREF="directive-dict.html#Syntax"
|
|
REL="Help"
|
|
><STRONG>Syntax:</STRONG></A> StartServers <EM>number</EM><BR>
|
|
<A
|
|
HREF="directive-dict.html#Default"
|
|
REL="Help"
|
|
><STRONG>Default:</STRONG></A> <CODE>StartServers 5</CODE><BR>
|
|
<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</p>
|
|
|
|
<p>The StartServers 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>
|
|
|
|
<P>See also <A HREF="#minsparethreads">MinSpareThreads</A> and
|
|
<A HREF="#maxsparethreads">MaxSpareThreads</A>.<P><HR>
|
|
|
|
<H2><A NAME="threadsperchild">ThreadsPerChild</A></H2>
|
|
<p><A
|
|
HREF="directive-dict.html#Syntax"
|
|
REL="Help"
|
|
><STRONG>Syntax:</STRONG></A> ThreadsPerChild <EM>number</EM><BR>
|
|
<A
|
|
HREF="directive-dict.html#Default"
|
|
REL="Help"
|
|
><STRONG>Default:</STRONG></A> <CODE>ThreadsPerChild 50</CODE><BR>
|
|
<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> Base<BR>
|
|
<A
|
|
HREF="directive-dict.html#Module"
|
|
REL="Help"
|
|
><STRONG>Module:</STRONG></A> mpmt_pthread</p>
|
|
|
|
<P>This directive sets the number of threads created by each child
|
|
process.</p>
|
|
|
|
|
|
<!--#include virtual="footer.html" -->
|
|
</BODY>
|
|
</HTML>
|