mirror of
https://github.com/apache/httpd.git
synced 2025-12-24 15:01:03 +03:00
- <em> -> <var> - a little other markup changes git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@97258 13f79535-47bb-0310-9956-ffa450edef68
135 lines
6.0 KiB
XML
135 lines
6.0 KiB
XML
<?xml version="1.0"?>
|
|
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
|
|
<modulesynopsis>
|
|
<name>worker</name>
|
|
<description>Multi-Processing Module implementing a hybrid
|
|
multi-threaded multi-process web server</description>
|
|
<status>MPM</status>
|
|
<sourcefile>worker.c</sourcefile>
|
|
<identifier>mpm_worker_module</identifier>
|
|
|
|
<summary>
|
|
<p>This Multi-Processing Module (MPM) implements a hybrid
|
|
multi-process multi-threaded server. By using threads to serve
|
|
requests, it is able to serve a large number of requests with
|
|
less system resources than a process-based server. Yet it
|
|
retains much of the stability of a process-based server by
|
|
keeping multiple processes available, each with many threads.</p>
|
|
|
|
<p>The most important directives used to control this MPM are
|
|
<directive module="mpm_common">ThreadsPerChild</directive>, which
|
|
controls the number of threads deployed by each child process and
|
|
<directive module="mpm_common">MaxClients</directive>, which
|
|
controls the maximum total number of threads that may be
|
|
launched.</p>
|
|
|
|
</summary>
|
|
<seealso><a href="../bind.html">Setting which addresses and
|
|
ports Apache uses</a></seealso>
|
|
|
|
<section id="how-it-works"><title>How it Works</title>
|
|
<p>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 <directive
|
|
module="mpm_common">ThreadsPerChild</directive> directive. The
|
|
individual threads then listen for connections and serve them when
|
|
they arrive.</p>
|
|
|
|
<p>Apache always tries to maintain a pool of <dfn>spare</dfn> 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. The number of processes that will initially launched is
|
|
set by the <directive module="mpm_common">StartServers</directive>
|
|
directive. Then during operation, 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 <directive
|
|
module="mpm_common">MinSpareThreads</directive> and <directive
|
|
module="mpm_common">MaxSpareThreads</directive>. 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 (i.e., the maximum total
|
|
number of threads in all processes) is determined by the
|
|
<directive module="mpm_common">MaxClients</directive> directive,
|
|
while the maximum number of processes that can be launched is set
|
|
by the <directive module="mpm_common">ServerLimit</directive>
|
|
directive. <directive module="mpm_common">ServerLimit</directive>
|
|
multiplied by <directive
|
|
module="mpm_common">ThreadsPerChild</directive> must be greater
|
|
than or equal to <directive
|
|
module="mpm_common">MaxClients</directive></p>
|
|
|
|
<p>A typical configuration of the process-thread controls in
|
|
the <module>worker</module> MPM could look as follows:</p>
|
|
|
|
<example>
|
|
StartServers 2<br />
|
|
MaxClients 150<br />
|
|
MinSpareThreads 25<br />
|
|
MaxSpareThreads 75<br />
|
|
ThreadsPerChild 25<br />
|
|
ServerLimit 16
|
|
</example>
|
|
|
|
<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 <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>
|
|
</section>
|
|
|
|
|
|
<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>Group</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>MaxClients</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>MinSpareThreads</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>ThreadLimit</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>User</name>
|
|
</directivesynopsis>
|
|
|
|
</modulesynopsis>
|