]> granicus.if.org Git - apache/blob - docs/manual/mod/event.xml.fr
Update xforms!
[apache] / docs / manual / mod / event.xml.fr
1 <?xml version="1.0"?>
2 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
4 <!-- English Revision : 1514214 -->
5 <!-- French translation : Lucien GENTIS -->
6 <!-- Reviewed by : Vincent Deffontaines -->
7
8 <!--
9  Licensed to the Apache Software Foundation (ASF) under one or more
10  contributor license agreements.  See the NOTICE file distributed with
11  this work for additional information regarding copyright ownership.
12  The ASF licenses this file to You under the Apache License, Version 2.0
13  (the "License"); you may not use this file except in compliance with
14  the License.  You may obtain a copy of the License at
15
16      http://www.apache.org/licenses/LICENSE-2.0
17
18  Unless required by applicable law or agreed to in writing, software
19  distributed under the License is distributed on an "AS IS" BASIS,
20  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  See the License for the specific language governing permissions and
22  limitations under the License.
23 -->
24
25 <modulesynopsis metafile="event.xml.meta">
26 <name>event</name>
27 <description>Une variante du MPM <module>worker</module> con&ccedil;ue pour ne
28 mobiliser des threads que pour les connexions en cours de traitement</description>
29 <status>MPM</status>
30 <sourcefile>event.c</sourcefile>
31 <identifier>mpm_event_module</identifier>
32
33 <summary>
34     <p>Le module multi-processus (MPM) <module>event</module> est con&ccedil;u
35     pour permettre le traitement d'un nombre accru de requ&ecirc;tes
36     simultan&eacute;es en d&eacute;l&eacute;guant certaines t&acirc;ches &agrave; des threads de support,
37     lib&eacute;rant par l&agrave;-m&ecirc;me le thread principal et lui permettant de
38     traiter les nouvelles requ&ecirc;tes. Il s'inspire du MPM
39     <module>worker</module> qui impl&eacute;mente un serveur hybride
40     multi-processus/multi-threads. Les directives de configuration &agrave;
41     l'ex&eacute;cution sont identiques &agrave; celles du MPM
42     <module>worker</module>.</p>
43
44     <p>Pour utiliser le MPM <module>event</module>, ajoutez
45     <code>--with-mpm=event</code> aux arguments du script
46     <program>configure</program> lorsque vous compilez le programme
47     <program>httpd</program>.</p>
48
49 </summary>
50
51 <seealso><a href="worker.html">Le MPM worker</a></seealso>
52
53 <section id="how-it-works"><title>Comment tout cela fonctionne</title>
54     <p>Ce MPM essaie de r&eacute;soudre le 'probl&egrave;me keep alive' de HTTP.
55     Lorsqu'un client a soumis une premi&egrave;re requ&ecirc;te, il peut garder la
56     connexion ouverte, et envoyer les requ&ecirc;tes suivantes en utilisant le
57     m&ecirc;me socket. Ceci permet de r&eacute;duire de mani&egrave;re significative la
58     surcharge due &agrave; la cr&eacute;ation de connexions TCP.
59     Cependant, le serveur HTTP Apache
60     mobilise en principe &agrave; cet effet un processus/thread enfant en
61     attente des donn&eacute;es du client, ce qui am&egrave;ne son propre lot
62     d'inconv&eacute;nients. Pour r&eacute;soudre ce probl&egrave;me, <module>event</module>
63     utilise un thread d&eacute;di&eacute; qui g&egrave;re les sockets en
64     &eacute;coute, tous les sockets en &eacute;tat Keep Alive, et les
65     sockets o&ugrave; les filtres gestionnaires et de protocole ont
66     fait leur travail et pour lesquels la seule chose restant &agrave; faire
67     consiste &agrave; envoyer les donn&eacute;es au client. La page d'&eacute;tat de
68     <module>mod_status</module> montre les connexions qui se trouvent
69     dans les situations mentionn&eacute;es.</p>
70
71     <p>Le gestionnaire de connexion am&eacute;lior&eacute; peut ne pas
72     fonctionner pour les filtres de connexion qui se d&eacute;clarent eux-m&ecirc;mes
73     comme incompatibles avec le MPM event. Dans ce cas, le MPM event
74     adopte le comportement du MPM <module>worker</module> et
75     r&eacute;serve un thread par connexion. Tous les modules fournis
76     avec le serveur sont compatibles avec le MPM event.</p>
77
78     <p>Une restriction similaire existe pour les requ&ecirc;tes qui utilisent
79     un filtre en sortie qui doit lire et/ou modifier l'ensemble du corps
80     de r&eacute;ponse, comme dans le cas de mod_ssl, mod_deflate, ou
81     mod_include. Si la connexion avec le client se bloque pendant que le
82     filtre traite les donn&eacute;es, et si la quantit&eacute; de donn&eacute;es g&eacute;n&eacute;r&eacute;e par
83     ce filtre est trop importante pour &ecirc;tre mise en tampon m&eacute;moire, le
84     thread utilis&eacute; pour la requ&ecirc;te n'est pas lib&eacute;r&eacute; pendant que httpd
85     attend que toutes les donn&eacute;es restantes aient &eacute;t&eacute; transmises au
86     client.</p>
87
88     <p>Le MPM pr&eacute;suppose que l'impl&eacute;mentation <code>apr_pollset</code>
89     sous-jacente est raisonnablement s&ucirc;re du point de vue des threads.
90     Ceci permet au MPM d'&eacute;viter un verrouillage de haut niveau excessif,
91     ou de devoir activer le thread en &eacute;coute afin de lui envoyer un
92     socket keep alive. Tout ceci n'est actuellement compatible qu'avec
93     KQueue et EPoll.</p>
94
95 </section>
96 <section id="requirements"><title>Pr&eacute;requis</title>
97     <p>Ce MPM d&eacute;pend des op&eacute;rations atomiques compare-and-swap
98     d'<glossary>APR</glossary> pour la synchronisation des threads. Si
99     vous compilez pour une plate-forme x86 et n'avez pas besoin du
100     support 386, ou si vous compilez pour une plate-forme SPARC et
101     n'avez pas besoin du support pre-UltraSPARC, ajoutez
102     <code>--enable-nonportable-atomics=yes</code> aux arguments du
103     script <program>configure</program>. Ceci permettra &agrave; APR
104     d'impl&eacute;menter les op&eacute;rations atomiques en utilisant des instructions
105     performantes indisponibles avec les processeurs plus
106     anciens.</p>
107
108     <p>Ce MPM ne fonctionne pas de mani&egrave;re optimale sur les
109     plates-formes plus anciennes qui ne g&egrave;rent pas correctement les
110     threads, mais ce probl&egrave;me est sans objet du fait du pr&eacute;requis
111     concernant EPoll ou KQueue.</p>
112
113     <ul>
114
115       <li>Pour utiliser ce MPM sous FreeBSD, la version 5.3 ou
116       sup&eacute;rieure de ce syst&egrave;me est recommand&eacute;e. Il est cependant
117       possible d'ex&eacute;cuter ce MPM sous FreeBSD 5.2.1 si vous utilisez
118       <code>libkse</code> (voir <code>man libmap.conf</code>).</li>
119
120       <li>Pour NetBSD, il est recommander d'utiliser la version 2.0 ou
121       sup&eacute;rieure.</li>
122
123       <li>Pour Linux, un noyau 2.6 est recommand&eacute;. Il faut aussi
124       s'assurer que votre version de <code>glibc</code> a &eacute;t&eacute; compil&eacute;e
125       avec le support pour EPoll.</li>
126
127     </ul>
128 </section>
129
130 <directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
131 </directivesynopsis>
132 <directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
133 </directivesynopsis>
134 <directivesynopsis location="mod_unixd"><name>Group</name>
135 </directivesynopsis>
136 <directivesynopsis location="mpm_common"><name>Listen</name>
137 </directivesynopsis>
138 <directivesynopsis location="mpm_common"><name>ListenBacklog</name>
139 </directivesynopsis>
140 <directivesynopsis location="mpm_common"><name>SendBufferSize</name>
141 </directivesynopsis>
142 <directivesynopsis location="mpm_common"><name>MaxRequestWorkers</name>
143 </directivesynopsis>
144 <directivesynopsis location="mpm_common"><name>MaxMemFree</name>
145 </directivesynopsis>
146 <directivesynopsis location="mpm_common"><name>MaxConnectionsPerChild</name>
147 </directivesynopsis>
148 <directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
149 </directivesynopsis>
150 <directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
151 </directivesynopsis>
152 <directivesynopsis location="mpm_common"><name>PidFile</name>
153 </directivesynopsis>
154 <directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
155 </directivesynopsis>
156 <directivesynopsis location="mpm_common"><name>ServerLimit</name>
157 </directivesynopsis>
158 <directivesynopsis location="mpm_common"><name>StartServers</name>
159 </directivesynopsis>
160 <directivesynopsis location="mpm_common"><name>ThreadLimit</name>
161 </directivesynopsis>
162 <directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
163 </directivesynopsis>
164 <directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
165 </directivesynopsis>
166 <directivesynopsis location="mod_unixd"><name>User</name>
167 </directivesynopsis>
168
169 <directivesynopsis>
170 <name>AsyncRequestWorkerFactor</name>
171 <description>Limite le nombre de connexions simultan&eacute;es par thread</description>
172 <syntax>AsyncRequestWorkerFactor <var>facteur</var></syntax>
173 <default>2</default>
174 <contextlist><context>server config</context> </contextlist>
175 <compatibility>Disponible depuis la version 2.3.13</compatibility>
176
177 <usage>
178     <p>Le MPM event g&egrave;re certaines connexions de mani&egrave;re asynchrone ;
179     dans ce cas, les threads traitant la requ&ecirc;te sont allou&eacute;s selon les
180     besoins et pour de courtes p&eacute;riodes. Dans les autres cas, un
181     thread est r&eacute;serv&eacute; par
182     connexion. Ceci peut conduire &agrave; des situations o&ugrave; tous les threads
183     sont satur&eacute;s et o&ugrave; aucun thread n'est capable d'effectuer de
184     nouvelles t&acirc;ches pour les connexions asynchrones &eacute;tablies.</p>
185
186     <p>Pour minimiser les effets de ce probl&egrave;me, le MPM event utilise
187     deux m&eacute;thodes : tout d'abord, il limite le nombre de connexions
188     simultan&eacute;es par thread en fonction du nombre de processus
189     inactifs. Ensuite, si tous les processus sont occup&eacute;s, il ferme des
190     connexions permanentes, m&ecirc;me si la limite de dur&eacute;e de la connexion
191     n'a pas &eacute;t&eacute; atteinte. Ceci autorise les clients concern&eacute;s &agrave; se
192     reconnecter &agrave; un autre processus poss&egrave;dant encore des threads
193     disponibles.</p>
194
195     <p>Cette directive permet de personnaliser finement la limite du
196     nombre de connexions par thread. Un processus n'acceptera de
197     nouvelles connexions que si le nombre actuel de connexions (sans
198     compter les connexions &agrave; l'&eacute;tat "closing") est
199     inf&eacute;rieur &agrave; :</p>
200
201     <p class="indent"><strong>
202         <directive module="mpm_common">ThreadsPerChild</directive> +
203         (<directive>AsyncRequestWorkerFactor</directive> *
204         <var>nombre de threads inactifs</var>)
205     </strong></p>
206
207     <p>En d'autres termes, le nombre maximum de connexions simultan&eacute;es
208     sera :</p>
209
210     <p class="indent"><strong>
211         (<directive>AsyncRequestWorkerFactor</directive> + 1) *
212         <directive module="mpm_common">MaxRequestWorkers</directive>
213     </strong></p>
214
215     <p>La directive <directive
216     module="mpm_common">MaxRequestWorkers</directive> se nommait
217     <directive>MaxClients</directive> avant la version 2.3.13. La valeur
218     ci-dessus montre que cet ancien nom ne correspondait pas &agrave; sa
219     signification exacte pour le MPM event.</p>
220
221     <p>La directive <directive>AsyncRequestWorkerFactor</directive>
222     accepte des valeurs d'argument de type non entier, comme "1.5".</p>
223
224 </usage>
225
226 </directivesynopsis>
227
228 </modulesynopsis>