]> granicus.if.org Git - apache/blob - docs/manual/mod/worker.xml.fr
Merge in APR[-util] macros from branches/trunk-buildconf-noapr
[apache] / docs / manual / mod / worker.xml.fr
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
4 <!-- English Revision : 1414094 -->
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="worker.xml.meta">
26 <name>worker</name>
27 <description>Module multi-processus implémentant un serveur web hybride
28 multi-processus multi-thread</description>
29 <status>MPM</status>
30 <sourcefile>worker.c</sourcefile>
31 <identifier>mpm_worker_module</identifier>
32
33 <summary>
34     <p>Ce module multi-processus (MPM) implémente un serveur hybride
35     multi-processus multi-thread. En utilisant les threads pour servir
36     les requêtes, il peut en traiter un grand nombre tout en consommant
37     moins de ressources qu'un serveur à base de processus. Cependant, il
38     conserve une grande partie de la stabilité d'un serveur à base de
39     processus en maintenant plusieurs processus disponibles, chacun de
40     ces derniers possédant de nombreux threads.</p>
41
42     <p>Les directives les plus importantes qui permettent de contrôler
43     ce MPM sont <directive
44     module="mpm_common">ThreadsPerChild</directive>, qui définit le
45     nombre de threads lancés par chaque processus enfant et <directive
46     module="mpm_common">MaxRequestWorkers</directive>, qui définit le nombre
47     global maximum de threads qui peuvent être lancés.</p>
48 </summary>
49 <seealso><a href="../bind.html">Définition des adresses et ports
50 qu'utilise le serveur HTTP Apache</a></seealso>
51
52 <section id="how-it-works"><title>Comment ça marche</title>
53     <p>Un processus de contrôle unique (le parent) a pour tâche de
54     lancer les processus enfants. Chaque processus enfant crée un nombre
55     fixe de threads serveurs selon la valeur de la directive <directive
56     module="mpm_common">ThreadsPerChild</directive>, ainsi
57     qu'un thread chargé d'attendre les connexions et de les passer à un
58     thread serveur pour traitement au fur et à mesure de leur arrivée.</p>
59
60     <p>Le serveur HTTP Apache essaie toujours de maintenir un jeu de
61     threads serveurs
62     inactifs ou <dfn>en réserve</dfn>, qui se tiennent prêts à traiter
63     les requêtes entrantes. De cette façon, les clients n'ont pas besoin
64     d'attendre la création d'un nouveau thread ou d'un nouveau processus
65     pour que leurs requêtes puissent être traitées. Le nombre de
66     processus lancés initialement est défini par la directive <directive
67     module="mpm_common">StartServers</directive>. En cours de
68     fonctionnement, le serveur évalue le nombre total de threads inactifs
69     dans tous les processus, et en crée ou en arrête de façon à
70     maintenir ce nombre à l'intérieur des limites définies par les
71     directives <directive
72     module="mpm_common">MinSpareThreads</directive> et <directive
73     module="mpm_common">MaxSpareThreads</directive>. Comme ce module
74     s'auto-contrôle de manière efficace, on peut en général conserver
75     les valeurs par défaut. Le nombre maximum de clients pouvant être
76     servis simultanément (c'est à dire le nombre global maximum de
77     threads pour tous les processus) est défini par la directive
78     <directive module="mpm_common">MaxRequestWorkers</directive>. Le nombre
79     maximum de processus enfants actifs est défini par la valeur de la
80     directive <directive module="mpm_common">MaxRequestWorkers</directive>
81     divisée par la valeur de la directive <directive module="mpm_common">
82     ThreadsPerChild</directive>.</p>
83
84     <p>Deux directives permettent de fixer des limites absolues pour le
85     nombre de processus enfants actifs et le nombre de threads serveurs
86     par processus enfant, et ne peuvent être modifiées qu'en
87     arrêtant complètement le serveur et en le démarrant à nouveau.
88     La valeur de la directive <directive
89     module="mpm_common">ServerLimit</directive> constitue une limite
90     absolue pour le nombre de processus enfants actifs, et doit être
91     supérieure ou égale à la valeur de la directive <directive
92     module="mpm_common">MaxRequestWorkers</directive> divisée par la valeur de
93     la directive <directive module="mpm_common">
94     ThreadsPerChild</directive>. La valeur de la directive <directive
95     module="mpm_common">ThreadLimit</directive> constitue une limite
96     absolue pour le nombre de threads par processus enfant, et doit être
97     supérieure ou égale à la valeur de la directive <directive
98     module="mpm_common">ThreadsPerChild</directive>.</p>
99
100     <p>En plus du jeu de processus enfants actifs, il peut exister
101     quelques processus enfants en cours d'arrêt, mais dont au moins un
102     thread serveur est encore en train de traiter une connexion client
103     existante. Il peut subsister en théorie jusqu'à <directive
104     module="mpm_common">MaxRequestWorkers</directive> processus en cours
105     d'arrêt, bien qu'en réalité, ce nombre sera en général beaucoup plus
106     petit. Ce comportement peut être évité en désactivant l'arrêt de
107     processus enfants individuels de la manière suivante :</p>
108
109     <ul>
110       <li>définir la valeur de <directive module="mpm_common">
111       MaxConnectionsPerChild</directive> à zéro</li>
112
113       <li>Définir la valeur de <directive module="mpm_common">
114       MaxSpareThreads</directive> à la même valeur que <directive
115       module="mpm_common">MaxRequestWorkers</directive></li>
116     </ul>
117
118     <p>Voici un exemple typique de configuration du contrôle
119     processus-thread pour le MPM <module>worker</module> :</p>
120
121     <highlight language="config">
122 ServerLimit         16
123 StartServers         2
124 MaxRequestWorkers  150
125 MinSpareThreads     25
126 MaxSpareThreads     75
127 ThreadsPerChild     25
128     </highlight>
129
130     <p>Alors que le processus parent est en général démarré en tant que
131     <code>root</code> sous Unix afin de se mettre en écoute du port 80,
132     les processus enfants et les threads sont lancés par le serveur sous un
133     utilisateur avec privilèges restreints. On peut utiliser les
134     directives <directive
135     module="mod_unixd">User</directive> et <directive
136     module="mod_unixd">Group</directive> pour définir les privilèges
137     des processus enfants. Les processus enfants doivent pouvoir être en
138     mesure de lire tous les contenus destinés à être servis, mais
139     doivent avoir des privilèges aussi bas que possible. De plus, ces
140     directives définissent également les privilèges dont vont hériter les
141     scripts CGI (sauf si on utilise <program>suexec</program>).</p>
142
143     <p>La directive <directive
144     module="mpm_common">MaxConnectionsPerChild</directive> permet de
145     définir la fréquence à laquelle le serveur recycle ses processus en
146     arrêtant les plus anciens et en en lançant de nouveaux.</p>
147
148     <p>Ce module MPM utilise le mutex <code>mpm-accept</code> pour
149     sérialiser l'accès aux connexions entrantes lorsqu'un problème
150     d'afflux de requêtes peut survenir (en général, lorsqu'il y a
151     plusieurs sockets en écoute). Les différents aspects de
152     l'implémentation de ce mutex peuvent être configurés via la
153     directive <directive module="core">Mutex</directive>. Vous
154     trouverez des informations plus détaillées à propos de ce mutex dans
155     la documentation sur les <a
156     href="../misc/perf-tuning.html">conseils en matière de
157     performances</a>.</p>
158
159 </section>
160
161 <directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
162 </directivesynopsis>
163 <directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
164 </directivesynopsis>
165 <directivesynopsis location="mod_unixd"><name>Group</name>
166 </directivesynopsis>
167 <directivesynopsis location="mpm_common"><name>PidFile</name>
168 </directivesynopsis>
169 <directivesynopsis location="mpm_common"><name>Listen</name>
170 </directivesynopsis>
171 <directivesynopsis location="mpm_common"><name>ListenBacklog</name>
172 </directivesynopsis>
173 <directivesynopsis location="mpm_common"><name>MaxRequestWorkers</name>
174 </directivesynopsis>
175 <directivesynopsis location="mpm_common"><name>MaxMemFree</name>
176 </directivesynopsis>
177 <directivesynopsis location="mpm_common"><name>MaxConnectionsPerChild</name>
178 </directivesynopsis>
179 <directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
180 </directivesynopsis>
181 <directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
182 </directivesynopsis>
183 <directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
184 </directivesynopsis>
185 <directivesynopsis location="mpm_common"><name>ReceiveBufferSize</name>
186 </directivesynopsis>
187 <directivesynopsis location="mpm_common"><name>SendBufferSize</name>
188 </directivesynopsis>
189 <directivesynopsis location="mpm_common"><name>ServerLimit</name>
190 </directivesynopsis>
191 <directivesynopsis location="mpm_common"><name>StartServers</name>
192 </directivesynopsis>
193 <directivesynopsis location="mpm_common"><name>ThreadLimit</name>
194 </directivesynopsis>
195 <directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
196 </directivesynopsis>
197 <directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
198 </directivesynopsis>
199 <directivesynopsis location="mod_unixd"><name>User</name>
200 </directivesynopsis>
201
202 </modulesynopsis>