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="<-" alt="<-" src="/images/left.gif" /></a></div> 22<div id="path"> 23<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.2</a> > <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"> de </a> | 28<a href="/en/mod/worker.html" title="English"> en </a> | 29<a href="/ja/mod/worker.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | 30<a href="/tr/mod/worker.html" hreflang="tr" rel="alternate" title="T�rk�e"> tr </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# 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 ">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# 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"> de </a> | 174<a href="/en/mod/worker.html" title="English"> en </a> | 175<a href="/ja/mod/worker.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | 176<a href="/tr/mod/worker.html" hreflang="tr" rel="alternate" title="T�rk�e"> tr </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&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>