| <?xml version='1.0' encoding='UTF-8' ?> |
| <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd"> |
| <?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?> |
| <!-- $Revision: 1.9 $ --> |
| |
| <!-- |
| Copyright 2002-2004 The Apache Software Foundation |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <manualpage metafile="mpm.xml.meta"> |
| |
| <title>Multi-Processing Modules (MPMs)</title> |
| |
| <summary> |
| <p>This document describes what a Multi-Processing Module is and |
| how they are used by the Apache HTTP Server.</p> |
| </summary> |
| |
| <section id="introduction"><title>Introduction</title> |
| |
| <p>The Apache HTTP Server is designed to be a powerful and |
| flexible web server that can work on a very wide variety of |
| platforms in a range of different environments. Different |
| platforms and different environments often require different |
| features, or may have different ways of implementing the same |
| feature most efficiently. Apache has always accommodated a wide |
| variety of environments through its modular design. This design |
| allows the webmaster to choose which features will be included |
| in the server by selecting which modules to load either at |
| compile-time or at run-time.</p> |
| |
| <p>Apache 2.0 extends this modular design to the most basic |
| functions of a web server. The server ships with a selection of |
| Multi-Processing Modules (MPMs) which are responsible for |
| binding to network ports on the machine, accepting requests, |
| and dispatching children to handle the requests.</p> |
| |
| <p>Extending the modular design to this level of the server |
| allows two important benefits:</p> |
| |
| <ul> |
| <li>Apache can more cleanly and efficiently support a wide |
| variety of operating systems. In particular, the Windows |
| version of Apache is now much more efficient, since |
| <module>mpm_winnt</module> can use native |
| networking features in place of the POSIX layer used in |
| Apache 1.3. This benefit also extends to other operating |
| systems that implement specialized MPMs.</li> |
| |
| <li>The server can be better customized for the needs of the |
| particular site. For example, sites that need a great deal of |
| scalability can choose to use a threaded MPM like |
| <module>worker</module>, while sites requiring |
| stability or compatibility with older software can use a |
| <module>prefork</module>. In addition, |
| special features like serving different hosts under different |
| userids (<module>perchild</module>) can be |
| provided.</li> |
| </ul> |
| |
| <p>At the user level, MPMs appear much like other Apache |
| modules. The main difference is that one and only one MPM must |
| be loaded into the server at any time. The list of available |
| MPMs appears on the <a href="mod/">module index page</a>.</p> |
| |
| </section> |
| |
| <section id="choosing"><title>Choosing an MPM</title> |
| |
| <p>MPMs must be chosen during configuration, and compiled into |
| the server. Compilers are capable of optimizing a lot of |
| functions if threads are used, but only if they know that |
| threads are being used. Because some MPMs use threads on Unix |
| and others don't, Apache will always perform better if the MPM |
| is chosen at configuration time and built into Apache.</p> |
| |
| <p>To actually choose the desired MPM, use the argument |
| --with-mpm= <em>NAME</em> with the ./configure script. |
| <em>NAME</em> is the name of the desired MPM.</p> |
| |
| <p>Once the server has been compiled, it is possible to |
| determine which MPM was chosen by using <code>./httpd |
| -l</code>. This command will list every module that is compiled |
| into the server, including the MPM.</p> |
| </section> |
| |
| <section id="defaults"><title>MPM Defaults</title> |
| |
| <p>The following table lists the default MPMs for various operating |
| systems. This will be the MPM selected if you do not make another |
| choice at compile-time.</p> |
| |
| <table> |
| <columnspec><column width=".2"/><column width=".2"/></columnspec> |
| <tr><td>BeOS</td><td><module>beos</module></td></tr> |
| <tr><td>Netware</td><td><module>mpm_netware</module></td></tr> |
| <tr><td>OS/2</td><td><module>mpmt_os2</module></td></tr> |
| <tr><td>Unix</td><td><module>prefork</module></td></tr> |
| <tr><td>Windows</td><td><module>mpm_winnt</module></td></tr> |
| </table> |
| </section> |
| |
| </manualpage> |