event.html.en revision 80d24ae8901685c116c757ea384f981f8041e4ce
842ae4bd224140319ae7feec1872b93dfd491143fielding<?xml version="1.0" encoding="ISO-8859-1"?>
842ae4bd224140319ae7feec1872b93dfd491143fielding<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
842ae4bd224140319ae7feec1872b93dfd491143fielding<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
842ae4bd224140319ae7feec1872b93dfd491143fielding XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
842ae4bd224140319ae7feec1872b93dfd491143fielding This file is generated from xml source: DO NOT EDIT
842ae4bd224140319ae7feec1872b93dfd491143fielding XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding -->
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd<title>event - Apache HTTP Server</title>
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd<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" />
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd<script src="/style/scripts/prettify.js" type="text/javascript">
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd</script>
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding<link href="/images/favicon.ico" rel="shortcut icon" /></head>
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding<body>
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh<div id="page-header">
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh<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>
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh<p class="apache">Apache HTTP Server Version 2.5</p>
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh<img alt="" src="/images/feather.gif" /></div>
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh<div id="path">
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh<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>
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh<div id="page-content">
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh<div id="preamble"><h1>Apache MPM event</h1>
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh<div class="toplang">
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh<p><span>Available Languages: </span><a href="/en/mod/event.html" title="English">&nbsp;en&nbsp;</a> |
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding<a href="/fr/mod/event.html" hreflang="fr" rel="alternate" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding</div>
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>A variant of the <code class="module"><a href="/mod/worker.html">worker</a></code> MPM with the goal
a7ed9c525f9460187f327cea953bf90ecf1bdc51gsteinof consuming threads only for connections with active processing</td></tr>
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding<tr><th><a href="module-dict.html#Status">Status:</a></th><td>MPM</td></tr>
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding<tr><th><a href="module-dict.html#ModuleIdentifier">Module�Identifier:</a></th><td>mpm_event_module</td></tr>
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding<tr><th><a href="module-dict.html#SourceFile">Source�File:</a></th><td>event.c</td></tr></table>
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding<h3>Summary</h3>
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding <p>The <code class="module"><a href="/mod/event.html">event</a></code> Multi-Processing Module (MPM) is
56fa845f76f99bb556a9a2fc8588f279adcad5e3jorton designed to allow more requests to be served simultaneously by
56fa845f76f99bb556a9a2fc8588f279adcad5e3jorton passing off some processing work to supporting threads, freeing up
56fa845f76f99bb556a9a2fc8588f279adcad5e3jorton the main threads to work on new requests. It is based on the
9ad1eb50ca1254f303fc87a41df9ae57fdf3bbb8wrowe <code class="module"><a href="/mod/worker.html">worker</a></code> MPM, which implements a hybrid
56fa845f76f99bb556a9a2fc8588f279adcad5e3jorton multi-process multi-threaded server. Run-time configuration
71debfa33ffaf708f3803495c4caf6b00b78ac86trawick directives are identical to those provided by
71debfa33ffaf708f3803495c4caf6b00b78ac86trawick <code class="module"><a href="/mod/worker.html">worker</a></code>.</p>
71debfa33ffaf708f3803495c4caf6b00b78ac86trawick
71debfa33ffaf708f3803495c4caf6b00b78ac86trawick <p>To use the <code class="module"><a href="/mod/event.html">event</a></code> MPM, add
0c9e94228dcb402c6a02c16b3641a0b80197ca17jfclere <code>--with-mpm=event</code> to the <code class="program"><a href="/programs/configure.html">configure</a></code>
0c9e94228dcb402c6a02c16b3641a0b80197ca17jfclere script's arguments when building the <code class="program"><a href="/programs/httpd.html">httpd</a></code>.</p>
0c9e94228dcb402c6a02c16b3641a0b80197ca17jfclere
0c9e94228dcb402c6a02c16b3641a0b80197ca17jfclere</div>
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding<div id="quickview"><h3 class="directives">Directives</h3>
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh<ul id="toc">
<li><img alt="" src="/images/down.gif" /> <a href="#asyncrequestworkerfactor">AsyncRequestWorkerFactor</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#enableexceptionhook">EnableExceptionHook</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mod_unixd.html#group">Group</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#maxconnectionsperchild">MaxConnectionsPerChild</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#maxmemfree">MaxMemFree</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
<li><img alt="" src="/images/right.gif" /> <a href="mod_unixd.html#user">User</a></li>
</ul>
<h3>Topics</h3>
<ul id="topics">
<li><img alt="" src="/images/down.gif" /> <a href="#how-it-works">How it Works</a></li>
<li><img alt="" src="/images/down.gif" /> <a href="#requirements">Requirements</a></li>
</ul><h3>See also</h3>
<ul class="seealso">
<li><a href="worker.html">The worker MPM</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="how-it-works" id="how-it-works">How it Works</a></h2>
<p>This MPM tries to fix the 'keep alive problem' in HTTP. After a client
completes the first request, the client can keep the connection
open, and send further requests using the same socket. This can
save significant overhead in creating TCP connections. However,
Apache HTTP Server traditionally keeps an entire child process/thread waiting
for data from the client, which brings its own disadvantages. To
solve this problem, this MPM uses a dedicated thread to handle both
the Listening sockets, all sockets that are in a Keep Alive state,
and sockets where the handler and protocol filters have done their work
and the only remaining thing to do is send the data to the client. The
status page of <code class="module"><a href="/mod/mod_status.html">mod_status</a></code> shows how many connections are
in the mentioned states.</p>
<p>The improved connection handling does not yet work for certain
connection filters, in particular SSL. For SSL connections, this MPM will
fall back to the behaviour of the <code class="module"><a href="/mod/worker.html">worker</a></code> MPM and
reserve one worker thread per connection.</p>
<p>The MPM assumes that the underlying <code>apr_pollset</code>
implementation is reasonably threadsafe. This enables the MPM to
avoid excessive high level locking, or having to wake up the listener
thread in order to send it a keep-alive socket. This is currently
only compatible with KQueue and EPoll.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="requirements" id="requirements">Requirements</a></h2>
<p>This MPM depends on <a class="glossarylink" href="/glossary.html#apr" title="see glossary">APR</a>'s atomic
compare-and-swap operations for thread synchronization. If you are
compiling for an x86 target and you don't need to support 386s, or
you are compiling for a SPARC and you don't need to run on
pre-UltraSPARC chips, add
<code>--enable-nonportable-atomics=yes</code> to the
<code class="program"><a href="/programs/configure.html">configure</a></code> script's arguments. This will cause
APR to implement atomic operations using efficient opcodes not
available in older CPUs.</p>
<p>This MPM does not perform well on older platforms which lack good
threading, but the requirement for EPoll or KQueue makes this
moot.</p>
<ul>
<li>To use this MPM on FreeBSD, FreeBSD 5.3 or higher is recommended.
However, it is possible to run this MPM on FreeBSD 5.2.1, if you
use <code>libkse</code> (see <code>man libmap.conf</code>).</li>
<li>For NetBSD, at least version 2.0 is recommended.</li>
<li>For Linux, a 2.6 kernel is recommended. It is also necessary to
ensure that your version of <code>glibc</code> has been compiled
with support for EPoll.</li>
</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AsyncRequestWorkerFactor" id="AsyncRequestWorkerFactor">AsyncRequestWorkerFactor</a> <a name="asyncrequestworkerfactor" id="asyncrequestworkerfactor">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limit concurrent connections per process</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AsyncRequestWorkerFactor <var>factor</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>2</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>MPM</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>event</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.13 and later</td></tr>
</table>
<p>The event MPM handles some connections in an asynchronous way, where
request worker threads are only allocated for short periods of time as
needed, and other (mostly SSL) connections with one request worker thread
reserved per connection. This can lead to situations where all workers are
tied up and no worker thread is available to handle new work on established
async connections.</p>
<p>To mitigate this problem, the event MPM does two things: Firstly, it
limits the number of connections accepted per process, depending on the
number of idle request workers. Secondly, if all workers are busy, it will
close connections in keep-alive state even if the keep-alive timeout has
not expired. This allows the respective clients to reconnect to a
different process which may still have worker threads available.</p>
<p>This directive can be used to fine-tune the per-process connection
limit. A process will only accept new connections if the current number of
connections (not counting connections in the "closing" state) is lower
than:</p>
<p class="indent"><strong>
<code class="directive"><a href="/mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> +
(<code class="directive">AsyncRequestWorkerFactor</code> *
<var>number of idle workers</var>)
</strong></p>
<p>This means the absolute maximum numbers of concurrent connections is:</p>
<p class="indent"><strong>
(<code class="directive">AsyncRequestWorkerFactor</code> + 1) *
<code class="directive"><a href="/mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code>
</strong></p>
<p><code class="directive"><a href="/mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> was called
<code class="directive">MaxClients</code> prior to version 2.3.13. The above value
shows that the old name did not accurately describe its meaning for the event MPM.</p>
<p><code class="directive">AsyncRequestWorkerFactor</code> can take non-integer
arguments, e.g "1.5".</p>
</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="/en/mod/event.html" title="English">&nbsp;en&nbsp;</a> |
<a href="/fr/mod/event.html" hreflang="fr" rel="alternate" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
</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>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/event.html';
(function(w, d) {
if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
d.write('<div id="comments_thread"><\/div>');
var s = d.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
(d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
}
else {
d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
}
})(window, document);
//--><!]]></script></div><div id="footer">
<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>
<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[//><!--
if (typeof(prettyPrint) !== 'undefined') {
prettyPrint();
}
//--><!]]></script>
</body></html>