| <?xml version="1.0" encoding="UTF-8"?> | |
| <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd"> | |
| <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?> | |
| <!-- English Revision: 1935407 --> | |
| <!-- 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="worker.xml.meta"> | |
| <name>worker</name> | |
| <description>Module multi-processus implémentant un serveur web hybride | |
| multi-processus multi-thread</description> | |
| <status>MPM</status> | |
| <sourcefile>worker.c</sourcefile> | |
| <identifier>mpm_worker_module</identifier> | |
| <summary> | |
| <p>Ce module multi-processus (MPM) implémente un serveur hybride | |
| multi-processus multi-thread. En utilisant les threads pour servir | |
| les requêtes, il peut en traiter un grand nombre tout en consommant | |
| moins de ressources qu'un serveur à base de processus. Cependant, il | |
| conserve une grande partie de la stabilité d'un serveur à base de | |
| processus en maintenant plusieurs processus disponibles, chacun de | |
| ces derniers possédant de nombreux threads.</p> | |
| <p>Les directives les plus importantes qui permettent de contrôler | |
| ce MPM sont <directive | |
| module="mpm_common">ThreadsPerChild</directive>, qui définit le | |
| nombre de threads lancés par chaque processus enfant et <directive | |
| module="mpm_common">MaxRequestWorkers</directive>, qui définit le nombre | |
| global maximum de threads qui peuvent être lancés.</p> | |
| <p>Lorsqu’il est construit en tant que module DSO, ce module peut être | |
| chargé avec la commande :</p> | |
| <highlight language="config"> | |
| LoadModule mpm_worker_module modules/mod_mpm_worker.so | |
| </highlight> | |
| </summary> | |
| <seealso><a href="../mpm.html">Modules multi-processus (MPMs)</a></seealso> | |
| <seealso><a href="../bind.html">Définition des adresses et ports | |
| qu'utilise le serveur HTTP Apache</a></seealso> | |
| <section id="how-it-works"><title>Comment ça marche</title> | |
| <p>Un processus de contrôle unique (le parent) a pour tâche de | |
| lancer les processus enfants. Chaque processus enfant crée un nombre | |
| fixe de threads serveurs selon la valeur de la directive <directive | |
| module="mpm_common">ThreadsPerChild</directive>, ainsi | |
| qu'un thread chargé d'attendre les connexions et de les passer à un | |
| thread serveur pour traitement au fur et à mesure de leur arrivée.</p> | |
| <p>Le serveur HTTP Apache essaie toujours de maintenir un jeu de | |
| threads serveurs | |
| inactifs ou <dfn>en réserve</dfn>, qui se tiennent prêts à traiter | |
| les requêtes entrantes. De cette façon, les clients n'ont pas besoin | |
| d'attendre la création d'un nouveau thread ou d'un nouveau processus | |
| pour que leurs requêtes puissent être traitées. Le nombre de | |
| processus lancés initialement est défini par la directive <directive | |
| module="mpm_common">StartServers</directive>. En cours de | |
| fonctionnement, le serveur évalue le nombre total de threads inactifs | |
| dans tous les processus, et en crée ou en arrête de façon à | |
| maintenir ce nombre à l'intérieur des limites définies par les | |
| directives <directive | |
| module="mpm_common">MinSpareThreads</directive> et <directive | |
| module="mpm_common">MaxSpareThreads</directive>. Comme ce module | |
| s'auto-contrôle de manière efficace, on peut en général conserver | |
| les valeurs par défaut. Le nombre maximum de clients pouvant être | |
| servis simultanément (c'est à dire le nombre global maximum de | |
| threads pour tous les processus) est défini par la directive | |
| <directive module="mpm_common">MaxRequestWorkers</directive>. Le nombre | |
| maximum de processus enfants actifs est défini par la valeur de la | |
| directive <directive module="mpm_common">MaxRequestWorkers</directive> | |
| divisée par la valeur de la directive <directive module="mpm_common"> | |
| ThreadsPerChild</directive>.</p> | |
| <p>Deux directives permettent de fixer des limites absolues pour le | |
| nombre de processus enfants actifs et le nombre de threads serveurs | |
| par processus enfant, et ne peuvent être modifiées qu'en | |
| arrêtant complètement le serveur et en le démarrant à nouveau. | |
| La valeur de la directive <directive | |
| module="mpm_common">ServerLimit</directive> constitue une limite | |
| absolue pour le nombre de processus enfants actifs, et doit être | |
| supérieure ou égale à la valeur de la directive <directive | |
| module="mpm_common">MaxRequestWorkers</directive> divisée par la valeur de | |
| la directive <directive module="mpm_common"> | |
| ThreadsPerChild</directive>. La valeur de la directive <directive | |
| module="mpm_common">ThreadLimit</directive> constitue une limite | |
| absolue pour le nombre de threads par processus enfant, et doit être | |
| supérieure ou égale à la valeur de la directive <directive | |
| module="mpm_common">ThreadsPerChild</directive>.</p> | |
| <p>En plus du jeu de processus enfants actifs, il peut exister | |
| quelques processus enfants en cours d'arrêt, mais dont au moins un | |
| thread serveur est encore en train de traiter une connexion client | |
| existante. Il peut subsister en théorie jusqu'à <directive | |
| module="mpm_common">MaxRequestWorkers</directive> processus en cours | |
| d'arrêt, bien qu'en réalité, ce nombre sera en général beaucoup plus | |
| petit. Ce comportement peut être évité en désactivant l'arrêt de | |
| processus enfants individuels de la manière suivante :</p> | |
| <ul> | |
| <li>définir la valeur de <directive module="mpm_common"> | |
| MaxConnectionsPerChild</directive> à zéro</li> | |
| <li>Définir la valeur de <directive module="mpm_common"> | |
| MaxSpareThreads</directive> à la même valeur que <directive | |
| module="mpm_common">MaxRequestWorkers</directive></li> | |
| </ul> | |
| <p>Voici un exemple typique de configuration du contrôle | |
| processus-thread pour le MPM <module>worker</module> :</p> | |
| <highlight language="config"> | |
| ServerLimit 16 | |
| StartServers 2 | |
| MaxRequestWorkers 150 | |
| MinSpareThreads 25 | |
| MaxSpareThreads 75 | |
| ThreadsPerChild 25 | |
| </highlight> | |
| <p>Alors que le processus parent est en général démarré en tant que | |
| <code>root</code> sous Unix afin de se mettre en écoute du port 80, | |
| les processus enfants et les threads sont lancés par le serveur sous un | |
| utilisateur avec privilèges restreints. On peut utiliser les | |
| directives <directive | |
| module="mod_unixd">User</directive> et <directive | |
| module="mod_unixd">Group</directive> pour définir les privilèges | |
| des processus enfants. Les processus enfants doivent pouvoir être en | |
| mesure de lire tous les contenus destinés à être servis, mais | |
| doivent avoir des privilèges aussi bas que possible. De plus, ces | |
| directives définissent également les privilèges dont vont hériter les | |
| scripts CGI (sauf si on utilise <program>suexec</program>).</p> | |
| <p>La directive <directive | |
| module="mpm_common">MaxConnectionsPerChild</directive> permet de | |
| définir la fréquence à laquelle le serveur recycle ses processus en | |
| arrêtant les plus anciens et en en lançant de nouveaux.</p> | |
| <p>Ce module MPM utilise le mutex <code>mpm-accept</code> pour | |
| sérialiser l'accès aux connexions entrantes lorsqu'un problème | |
| d'afflux de requêtes peut survenir (en général, lorsqu'il y a | |
| plusieurs sockets en écoute). Les différents aspects de | |
| l'implémentation de ce mutex peuvent être configurés via la | |
| directive <directive module="core">Mutex</directive>. Vous | |
| trouverez des informations plus détaillées à propos de ce mutex dans | |
| la documentation sur les <a | |
| href="../misc/perf-tuning.html">conseils en matière de | |
| performances</a>.</p> | |
| </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>PidFile</name> | |
| </directivesynopsis> | |
| <directivesynopsis location="mpm_common"><name>Listen</name> | |
| </directivesynopsis> | |
| <directivesynopsis location="mpm_common"><name>ListenBacklog</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>ScoreBoardFile</name> | |
| </directivesynopsis> | |
| <directivesynopsis location="mpm_common"><name>ReceiveBufferSize</name> | |
| </directivesynopsis> | |
| <directivesynopsis location="mpm_common"><name>SendBufferSize</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> | |
| </modulesynopsis> |