]> granicus.if.org Git - apache/blob - docs/manual/mod/worker.html.en
update transformation
[apache] / docs / manual / mod / worker.html.en
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
4         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5               This file is generated from xml source: DO NOT EDIT
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7       -->
8 <title>worker - Apache HTTP Server</title>
9 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
12 <script src="../style/scripts/prettify.js" type="text/javascript">
13 </script>
14
15 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
16 <body>
17 <div id="page-header">
18 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
19 <p class="apache">Apache HTTP Server Version 2.5</p>
20 <img alt="" src="../images/feather.gif" /></div>
21 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
22 <div id="path">
23 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Modules</a></div>
24 <div id="page-content">
25 <div id="preamble"><h1>Apache MPM worker</h1>
26 <div class="toplang">
27 <p><span>Available Languages: </span><a href="../de/mod/worker.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
28 <a href="../en/mod/worker.html" title="English">&nbsp;en&nbsp;</a> |
29 <a href="../ja/mod/worker.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
30 <a href="../tr/mod/worker.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
31 </div>
32 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Multi-Processing Module implementing a hybrid
33     multi-threaded multi-process web server</td></tr>
34 <tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
35 <tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>mpm_worker_module</td></tr>
36 <tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>worker.c</td></tr></table>
37 <h3>Summary</h3>
38
39     <p>This Multi-Processing Module (MPM) implements a hybrid
40     multi-process multi-threaded server. By using threads to serve
41     requests, it is able to serve a large number of requests with
42     fewer system resources than a process-based server. However, it
43     retains much of the stability of a process-based server by
44     keeping multiple processes available, each with many threads.</p>
45
46     <p>The most important directives used to control this MPM are
47     <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code>, which
48     controls the number of threads deployed by each child process and
49     <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code>, which
50     controls the maximum total number of threads that may be
51     launched.</p>
52 </div>
53 <div id="quickview"><h3 class="directives">Directives</h3>
54 <ul id="toc">
55 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
56 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#enableexceptionhook">EnableExceptionHook</a></li>
57 <li><img alt="" src="../images/right.gif" /> <a href="mod_unixd.html#group">Group</a></li>
58 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
59 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
60 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxconnectionsperchild">MaxConnectionsPerChild</a></li>
61 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
62 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></li>
63 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
64 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
65 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
66 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#receivebuffersize">ReceiveBufferSize</a></li>
67 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
68 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
69 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li>
70 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
71 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
72 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
73 <li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
74 <li><img alt="" src="../images/right.gif" /> <a href="mod_unixd.html#user">User</a></li>
75 </ul>
76 <h3>Topics</h3>
77 <ul id="topics">
78 <li><img alt="" src="../images/down.gif" /> <a href="#how-it-works">How it Works</a></li>
79 </ul><h3>See also</h3>
80 <ul class="seealso">
81 <li><a href="../bind.html">Setting which addresses and ports Apache HTTP Server uses</a></li>
82 </ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
83 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
84 <div class="section">
85 <h2><a name="how-it-works" id="how-it-works">How it Works</a></h2>
86     <p>A single control process (the parent) is responsible for launching
87     child processes. Each child process creates a fixed number of server
88     threads as specified in the <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> directive, as well
89     as a listener thread which listens for connections and passes them
90     to a server thread for processing when they arrive.</p>
91
92     <p>Apache HTTP Server always tries to maintain a pool of <dfn>spare</dfn> or
93     idle server threads, which stand ready to serve incoming
94     requests. In this way, clients do not need to wait for a new
95     threads or processes to be created before their requests can be
96     served. The number of processes that will initially launched is
97     set by the <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>
98     directive. During operation, the server assesses the total number
99     of idle threads in all processes, and forks or kills processes to
100     keep this number within the boundaries specified by <code class="directive"><a href="../mod/mpm_common.html#minsparethreads">MinSpareThreads</a></code> and <code class="directive"><a href="../mod/mpm_common.html#maxsparethreads">MaxSpareThreads</a></code>. Since this
101     process is very self-regulating, it is rarely necessary to modify
102     these directives from their default values. The maximum number of
103     clients that may be served simultaneously (i.e., the maximum total
104     number of threads in all processes) is determined by the
105     <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> directive.
106     The maximum number of active child processes is determined by
107     the <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code>
108     directive divided by the <code class="directive"><a href="../mod/mpm_common.html#&#10;    threadsperchild">
109     ThreadsPerChild</a></code> directive.</p>
110
111     <p>Two directives set hard limits on the number of active child
112     processes and the number of server threads in a child process,
113     and can only be changed by fully stopping the server and then
114     starting it again.  <code class="directive"><a href="../mod/mpm_common.html#serverlimit&#10;    ">ServerLimit
115     </a></code> is a hard limit on the number of active child
116     processes, and must be greater than or equal to the
117     <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code>
118     directive divided by the <code class="directive"><a href="../mod/mpm_common.html#&#10;    threadsperchild">
119     ThreadsPerChild</a></code> directive.
120     <code class="directive"><a href="../mod/mpm_common.html#threadlimit">ThreadLimit</a></code> is a hard
121     limit of the number of server threads, and must be greater than
122     or equal to the <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> directive.</p>
123
124     <p>In addition to the set of active child processes, there may
125     be additional child processes which are terminating, but where at
126     least one server thread is still handling an existing client
127     connection.  Up to <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> terminating processes
128     may be present, though the actual number can be expected to be
129     much smaller.  This behavior can be avoided by disabling the
130     termination of individual child processes, which is achieved using
131     the following:</p>
132
133     <ul>
134       <li>set the value of <code class="directive"><a href="../mod/mpm_common.html#&#10;      maxconnectionsperchild">
135       MaxConnectionsPerChild</a></code> to zero</li>
136
137       <li>set the value of <code class="directive"><a href="../mod/mpm_common.html#&#10;      maxsparethreads">
138       MaxSpareThreads</a></code> to the same value as
139       <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code></li>
140     </ul>
141
142     <p>A typical configuration of the process-thread controls in
143     the <code class="module"><a href="../mod/worker.html">worker</a></code> MPM could look as follows:</p>
144
145     <pre class="prettyprint lang-config">
146 ServerLimit         16
147 StartServers         2
148 MaxRequestWorkers  150
149 MinSpareThreads     25
150 MaxSpareThreads     75
151 ThreadsPerChild     25
152     </pre>
153
154
155     <p>While the parent process is usually started as <code>root</code>
156     under Unix in order to bind to port 80, the child processes and threads
157     are launched by the server as a less-privileged user. The <code class="directive"><a href="../mod/mod_unixd.html#user">User</a></code> and <code class="directive"><a href="../mod/mod_unixd.html#group">Group</a></code> directives are used to set
158     the privileges of the Apache HTTP Server child processes. The child processes
159     must be able to read all the content that will be served, but
160     should have as few privileges beyond that as possible. In
161     addition, unless <code class="program"><a href="../programs/suexec.html">suexec</a></code> is used,
162     these directives also set the privileges which will be inherited
163     by CGI scripts.</p>
164
165     <p><code class="directive"><a href="../mod/mpm_common.html#maxconnectionsperchild">MaxConnectionsPerChild</a></code>
166     controls how frequently the server recycles processes by killing
167     old ones and launching new ones.</p>
168
169     <p>This MPM uses the <code>mpm-accept</code> mutex to serialize
170     access to incoming connections when subject to the thundering herd
171     problem (generally, when there are multiple listening sockets).
172     The implementation aspects of this mutex can be configured with the
173     <code class="directive"><a href="../mod/core.html#mutex">Mutex</a></code> directive.  The <a href="../misc/perf-tuning.html">performance hints</a>
174     documentation has additional information about this mutex.</p>
175 </div>
176 </div>
177 <div class="bottomlang">
178 <p><span>Available Languages: </span><a href="../de/mod/worker.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
179 <a href="../en/mod/worker.html" title="English">&nbsp;en&nbsp;</a> |
180 <a href="../ja/mod/worker.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
181 <a href="../tr/mod/worker.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
182 </div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>This section is experimental!</strong><br />Comments placed here should not be expected 
183 to last beyond the testing phase of this system, nor do we in any way guarantee that we'll read them.</div>
184 <script type="text/javascript"><!--//--><![CDATA[//><!--
185 var disqus_shortname = 'httpd';
186 var disqus_identifier = 'http://httpd.apache.org/docs/2.4/mod/worker.html.en';
187 (function(w, d) {
188     if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
189         d.write('<div id="disqus_thread"><\/div>');
190         var s = d.createElement('script');
191         s.type = 'text/javascript';
192         s.async = true;
193         s.src = 'http' + '://' + disqus_shortname + '.disqus.com/embed.js';
194         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
195     }
196     else {
197         d.write('<div id="disqus_thread">Comments have been disabled for offline viewing.<\/div>');
198     }
199 })(window, document);
200 //--><!]]></script></div><div id="footer">
201 <p class="apache">Copyright 2012 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
202 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
203 if (typeof(prettyPrint) !== 'undefined') {
204     prettyPrint();
205 }
206 //--><!]]></script>
207 </body></html>