mirror of
https://github.com/apache/httpd.git
synced 2025-11-02 06:53:27 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1361948 13f79535-47bb-0310-9956-ffa450edef68
216 lines
10 KiB
Plaintext
216 lines
10 KiB
Plaintext
<?xml version="1.0"?>
|
|
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
|
|
<!-- English Revision: 1228296:1361778 (outdated) -->
|
|
<!-- French translation : Lucien GENTIS -->
|
|
<!-- Reviewed by : Vincent Deffontaines -->
|
|
|
|
<!--
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You 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.
|
|
-->
|
|
|
|
<modulesynopsis metafile="event.xml.meta">
|
|
<name>event</name>
|
|
<description>Une variante du MPM <module>worker</module> conçue pour ne
|
|
mobiliser des threads que pour les connexions en cours de traitement</description>
|
|
<status>MPM</status>
|
|
<sourcefile>event.c</sourcefile>
|
|
<identifier>mpm_event_module</identifier>
|
|
|
|
<summary>
|
|
<p>Le module multi-processus (MPM) <module>event</module> est conçu
|
|
pour permettre le traitement d'un nombre accru de requêtes
|
|
simultanées en déléguant certaines tâches à des threads de support,
|
|
libérant par là-même le thread principal et lui permettant de
|
|
traiter les nouvelles requêtes. Il s'inspire du MPM
|
|
<module>worker</module> qui implémente un serveur hybride
|
|
multi-processus/multi-threads. Les directives de configuration à
|
|
l'exécution sont identiques à celles du MPM
|
|
<module>worker</module>.</p>
|
|
|
|
<p>Pour utiliser le MPM <module>event</module>, ajoutez
|
|
<code>--with-mpm=event</code> aux arguments du script
|
|
<program>configure</program> lorsque vous compilez le programme
|
|
<program>httpd</program>.</p>
|
|
|
|
</summary>
|
|
|
|
<seealso><a href="worker.html">Le MPM worker</a></seealso>
|
|
|
|
<section id="how-it-works"><title>Comment tout cela fonctionne</title>
|
|
<p>Ce MPM essaie de résoudre le 'problème keep alive' de HTTP.
|
|
Lorsqu'un client a soumis une première requête, il peut garder la
|
|
connexion ouverte, et envoyer les requêtes suivantes en utilisant le
|
|
même socket. Ceci permet de réduire de manière significative la
|
|
surcharge due à la création de connexions TCP.
|
|
Cependant, le serveur HTTP Apache
|
|
mobilise en principe à cet effet un processus/thread enfant en
|
|
attente des données du client, ce qui amène son propre lot
|
|
d'inconvénients. Pour résoudre ce problème, <module>event</module>
|
|
utilise un thread dédié qui gère les sockets en
|
|
écoute, tous les sockets en état Keep Alive, et les
|
|
sockets où les filtres gestionnaires et de protocole ont
|
|
fait leur travail et pour lesquels la seule chose restant à faire
|
|
consiste à envoyer les données au client. La page d'état de
|
|
<module>mod_status</module> montre les connexions qui se trouvent
|
|
dans les situations mentionnées.</p>
|
|
|
|
<p>Le gestionnaire de connexion amélioré ne fonctionne pas encore
|
|
pour certains filtres de connexion, et en particulier SSL. Pour les
|
|
connexions SSL, ce MPM réadopte le comportement du MPM
|
|
<module>worker</module> et réserve un thread par connexion.</p>
|
|
|
|
<p>Le MPM présuppose que l'implémentation <code>apr_pollset</code>
|
|
sous-jacente est raisonnablement sûre du point de vue des threads.
|
|
Ceci permet au MPM d'éviter un verrouillage de haut niveau excessif,
|
|
ou de devoir activer le thread en écoute afin de lui envoyer un
|
|
socket keep alive. Tout ceci n'est actuellement compatible qu'avec
|
|
KQueue et EPoll.</p>
|
|
|
|
</section>
|
|
<section id="requirements"><title>Prérequis</title>
|
|
<p>Ce MPM dépend des opérations atomiques compare-and-swap
|
|
d'<glossary>APR</glossary> pour la synchronisation des threads. Si
|
|
vous compilez pour une plate-forme x86 et n'avez pas besoin du
|
|
support 386, ou si vous compilez pour une plate-forme SPARC et
|
|
n'avez pas besoin du support pre-UltraSPARC, ajoutez
|
|
<code>--enable-nonportable-atomics=yes</code> aux arguments du
|
|
script <program>configure</program>. Ceci permettra à APR
|
|
d'implémenter les opérations atomiques en utilisant des instructions
|
|
performantes indisponibles avec les processeurs plus
|
|
anciens.</p>
|
|
|
|
<p>Ce MPM ne fonctionne pas de manière optimale sur les
|
|
plates-formes plus anciennes qui ne gèrent pas correctement les
|
|
threads, mais ce problème est sans objet du fait du prérequis
|
|
concernant EPoll ou KQueue.</p>
|
|
|
|
<ul>
|
|
|
|
<li>Pour utiliser ce MPM sous FreeBSD, la version 5.3 ou
|
|
supérieure de ce système est recommandée. Il est cependant
|
|
possible d'exécuter ce MPM sous FreeBSD 5.2.1 si vous utilisez
|
|
<code>libkse</code> (voir <code>man libmap.conf</code>).</li>
|
|
|
|
<li>Pour NetBSD, il est recommander d'utiliser la version 2.0 ou
|
|
supérieure.</li>
|
|
|
|
<li>Pour Linux, un noyau 2.6 est recommandé. Il faut aussi
|
|
s'assurer que votre version de <code>glibc</code> a été compilée
|
|
avec le support pour EPoll.</li>
|
|
|
|
</ul>
|
|
</section>
|
|
|
|
<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mod_unixd"><name>Group</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>Listen</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>MaxRequestWorkers</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>MaxConnectionsPerChild</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>PidFile</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>ServerLimit</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>StartServers</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
|
|
</directivesynopsis>
|
|
<directivesynopsis location="mod_unixd"><name>User</name>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>AsyncRequestWorkerFactor</name>
|
|
<description>Limite le nombre de connexions simultanées par thread</description>
|
|
<syntax>AsyncRequestWorkerFactor <var>facteur</var></syntax>
|
|
<default>2</default>
|
|
<contextlist><context>server config</context> </contextlist>
|
|
<compatibility>Disponible depuis la version 2.3.13</compatibility>
|
|
|
|
<usage>
|
|
<p>Le MPM event gère certaines connexions de manière asynchrone ;
|
|
dans ce cas, les threads traitant la requête sont alloués selon les
|
|
besoins et pour de courtes périodes. Dans les autres cas (la plupart
|
|
du temps pour les connexions SSL), un thread est réservé par
|
|
connexion. Ceci peut conduire à des situations où tous les threads
|
|
sont saturés et où aucun thread n'est capable d'effectuer de
|
|
nouvelles tâches pour les connexions asynchrones établies.</p>
|
|
|
|
<p>Pour minimiser les effets de ce problème, le MPM event utilise
|
|
deux méthodes : tout d'abord, il limite le nombre de connexions
|
|
simultanées par thread en fonction du nombre de processus
|
|
inactifs. Ensuite, si tous les processus sont occupés, il ferme des
|
|
connexions permanentes, même si la limite de durée de la connexion
|
|
n'a pas été atteinte. Ceci autorise les clients concernés à se
|
|
reconnecter à un autre processus possèdant encore des threads
|
|
disponibles.</p>
|
|
|
|
<p>Cette directive permet de personnaliser finement la limite du
|
|
nombre de connexions par thread. Un processus n'acceptera de
|
|
nouvelles connexions que si le nombre actuel de connexions est
|
|
inférieur à :</p>
|
|
|
|
<p class="indent"><strong>
|
|
<directive module="mpm_common">ThreadsPerChild</directive> +
|
|
(<directive>AsyncRequestWorkerFactor</directive> *
|
|
<var>nombre de threads inactifs</var>)
|
|
</strong></p>
|
|
|
|
<p>En d'autres termes, le nombre maximum de connexions simultanées
|
|
sera :</p>
|
|
|
|
<p class="indent"><strong>
|
|
(<directive>AsyncRequestWorkerFactor</directive> + 1) *
|
|
<directive module="mpm_common">MaxRequestWorkers</directive>
|
|
</strong></p>
|
|
|
|
<p>La directive <directive
|
|
module="mpm_common">MaxRequestWorkers</directive> se nommait
|
|
<directive>MaxClients</directive> avant la version 2.3.13. La valeur
|
|
ci-dessus montre que cet ancien nom ne correspondait pas à sa
|
|
signification exacte pour le MPM event.</p>
|
|
|
|
<p>La directive <directive>AsyncRequestWorkerFactor</directive>
|
|
accepte des valeurs d'argument de type non entier, comme "1.5".</p>
|
|
|
|
</usage>
|
|
|
|
</directivesynopsis>
|
|
|
|
</modulesynopsis>
|