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.2</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.2</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#maxclients">MaxClients</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#acceptmutex">AcceptMutex</a></li>
56<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
57<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#enableexceptionhook">EnableExceptionHook</a></li>
58<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#group">Group</a></li>
59<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
60<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
61<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#lockfile">LockFile</a></li>
62<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li>
63<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
64<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li>
65<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
66<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
67<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
68<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#receivebuffersize">ReceiveBufferSize</a></li>
69<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
70<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
71<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li>
72<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
73<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
74<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
75<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
76<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
77</ul>
78<h3>Topics</h3>
79<ul id="topics">
80<li><img alt="" src="/images/down.gif" /> <a href="#how-it-works">How it Works</a></li>
81</ul><h3>See also</h3>
82<ul class="seealso">
83<li><a href="/bind.html">Setting which addresses and ports Apache
84uses</a></li>
85</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
86<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
87<div class="section">
88<h2><a name="how-it-works" id="how-it-works">How it Works</a></h2>
89    <p>A single control process (the parent) is responsible for launching 
90    child processes. Each child process creates a fixed number of server
91    threads as specified in the <code class="directive"><a href="/mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> directive, as well
92    as a listener thread which listens for connections and passes them
93    to a server thread for processing when they arrive.</p>
94
95    <p>Apache always tries to maintain a pool of <dfn>spare</dfn> or
96    idle server threads, which stand ready to serve incoming
97    requests. In this way, clients do not need to wait for a new
98    threads or processes to be created before their requests can be
99    served. The number of processes that will initially launch is
100    set by the <code class="directive"><a href="/mod/mpm_common.html#startservers">StartServers</a></code>
101    directive. During operation, Apache assesses the total number
102    of idle threads in all processes, and forks or kills processes to
103    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
104    process is very self-regulating, it is rarely necessary to modify
105    these directives from their default values. The maximum number of
106    clients that may be served simultaneously (i.e., the maximum total
107    number of threads in all processes) is determined by the
108    <code class="directive"><a href="/mod/mpm_common.html#maxclients">MaxClients</a></code> directive.
109    The maximum number of active child processes is determined by
110    the <code class="directive"><a href="/mod/mpm_common.html#maxclients">MaxClients</a></code>
111    directive divided by the <code class="directive"><a href="/mod/mpm_common.html#&#10;    threadsperchild">
112    ThreadsPerChild</a></code> directive.</p>
113
114    <p>Two directives set hard limits on the number of active child
115    processes and the number of server threads in a child process,
116    and can only be changed by fully stopping the server and then 
117    starting it again.  <code class="directive"><a href="/mod/mpm_common.html#serverlimit&#10;    ">ServerLimit
118    </a></code> is a hard limit on the number of active child 
119    processes, and must be greater than or equal to the 
120    <code class="directive"><a href="/mod/mpm_common.html#maxclients">MaxClients</a></code>
121    directive divided by the <code class="directive"><a href="/mod/mpm_common.html#&#10;    threadsperchild">
122    ThreadsPerChild</a></code> directive.  
123    <code class="directive"><a href="/mod/mpm_common.html#threadlimit">ThreadLimit</a></code> is a hard
124    limit of the number of server threads, and must be greater than
125    or equal to the <code class="directive"><a href="/mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> directive.  If 
126    non-default values are specified for these directives, they 
127    should appear before other <code class="module"><a href="/mod/worker.html">worker</a></code> directives.</p>
128
129    <p>In addition to the set of active child processes, there may 
130    be additional child processes which are terminating, but where at
131    least one server thread is still handling an existing client
132    connection.  Up to <code class="directive"><a href="/mod/mpm_common.html#maxclients">MaxClients</a></code> terminating processes 
133    may be present, though the actual number can be expected to be 
134    much smaller.  This behavior can be avoided by disabling the 
135    termination of individual child processes, which is achieved using
136    the following:</p>
137
138    <ul>
139      <li>set the value of <code class="directive"><a href="/mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code> to zero</li>
140
141      <li>set the value of <code class="directive"><a href="/mod/mpm_common.html#maxsparethreads">MaxSpareThreads</a></code> to the same value as
142      <code class="directive"><a href="/mod/mpm_common.html#maxclients">MaxClients</a></code></li>
143    </ul>
144
145    <p>A typical configuration of the process-thread controls in
146    the <code class="module"><a href="/mod/worker.html">worker</a></code> MPM could look as follows:</p>
147
148    <div class="example"><p><code>
149      ServerLimit         16<br />
150      StartServers         2<br />
151      MaxClients         150<br />
152      MinSpareThreads     25<br />
153      MaxSpareThreads     75<br />
154      ThreadsPerChild     25
155    </code></p></div>
156
157    <p>While the parent process is usually started as <code>root</code>
158    under Unix in order to bind to port 80, the child processes and threads
159    are launched by Apache as a less-privileged user. The <code class="directive"><a href="/mod/mpm_common.html#user">User</a></code> and <code class="directive"><a href="/mod/mpm_common.html#group">Group</a></code> directives are used to set
160    the privileges of the Apache child processes. The child processes
161    must be able to read all the content that will be served, but
162    should have as few privileges beyond that as possible. In
163    addition, unless <code class="program"><a href="/programs/suexec.html">suexec</a></code> is used,
164    these directives also set the privileges which will be inherited
165    by CGI scripts.</p>
166
167    <p><code class="directive"><a href="/mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
168    controls how frequently the server recycles processes by killing
169    old ones and launching new ones.</p>
170</div>
171</div>
172<div class="bottomlang">
173<p><span>Available Languages: </span><a href="/de/mod/worker.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
174<a href="/en/mod/worker.html" title="English">&nbsp;en&nbsp;</a> |
175<a href="/ja/mod/worker.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
176<a href="/tr/mod/worker.html" hreflang="tr" rel="alternate" title="T�rk�e">&nbsp;tr&nbsp;</a></p>
177</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>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
178<script type="text/javascript"><!--//--><![CDATA[//><!--
179var comments_shortname = 'httpd';
180var comments_identifier = 'http://httpd.apache.org/docs/2.2/mod/worker.html';
181(function(w, d) {
182    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
183        d.write('<div id="comments_thread"><\/div>');
184        var s = d.createElement('script');
185        s.type = 'text/javascript';
186        s.async = true;
187        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
188        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
189    }
190    else { 
191        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
192    }
193})(window, document);
194//--><!]]></script></div><div id="footer">
195<p class="apache">Copyright 2013 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>
196<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[//><!--
197if (typeof(prettyPrint) !== 'undefined') {
198    prettyPrint();
199}
200//--><!]]></script>
201</body></html>