summaryrefslogtreecommitdiffstats
path: root/docs/manual/misc/perf-scaling.xml.fr
diff options
context:
space:
mode:
Diffstat (limited to 'docs/manual/misc/perf-scaling.xml.fr')
-rw-r--r--docs/manual/misc/perf-scaling.xml.fr1670
1 files changed, 835 insertions, 835 deletions
diff --git a/docs/manual/misc/perf-scaling.xml.fr b/docs/manual/misc/perf-scaling.xml.fr
index 8af776b77f..40c3429ffd 100644
--- a/docs/manual/misc/perf-scaling.xml.fr
+++ b/docs/manual/misc/perf-scaling.xml.fr
@@ -3,7 +3,7 @@
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
<!-- English Revision : 1690137 -->
<!-- French translation : Lucien GENTIS -->
-<!-- Reviewed by : Vincent Deffontaines -->
+<!-- $LastChangedRevision: 2015071101 $ -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
@@ -21,104 +21,104 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<manualpage metafile="perf-scaling.xml.meta">
+<manualpage metafile="perf-scaling.xml.meta">
<parentdocument href="./">Documentations diverses</parentdocument>
-
- <title>Amélioration des performances</title>
-
+
+ <title>Am&eacute;lioration des performances</title>
+
<summary>
-
+
<p>Il est dit dans la documentation d'Apache 1.3
- à propos de l'amélioration des performances :
+ &agrave; propos de l'am&eacute;lioration des performances :
</p>
<blockquote><p>
- "Apache est un serveur web à vocation générale, conçu pour
- être non seulement efficace mais aussi rapide. Dans sa
- configuration de base, ses performances sont déjà
- relativement satisfaisantes. La plupart des sites possèdent
- une bande passante en sortie inférieure à 10 Mbits que le
- serveur Apache peut mettre pleinement à profit en utilisant un serveur à base
+ "Apache est un serveur web &agrave; vocation g&eacute;n&eacute;rale, con&ccedil;u pour
+ &ecirc;tre non seulement efficace mais aussi rapide. Dans sa
+ configuration de base, ses performances sont d&eacute;j&agrave;
+ relativement satisfaisantes. La plupart des sites poss&egrave;dent
+ une bande passante en sortie inf&eacute;rieure &agrave; 10 Mbits que le
+ serveur Apache peut mettre pleinement &agrave; profit en utilisant un serveur &agrave; base
de processeur Pentium bas de gamme."</p>
</blockquote>
- <p>Cette phrase ayant été écrite il y a plusieurs années,
- entre temps de nombreuses choses ont changé. D'une part, les
+ <p>Cette phrase ayant &eacute;t&eacute; &eacute;crite il y a plusieurs ann&eacute;es,
+ entre temps de nombreuses choses ont chang&eacute;. D'une part, les
serveurs sont devenus beaucoup plus rapides. D'autre part, de
- nombreux sites se voient maintenant allouée une bande passante
- en sortie bien supérieure à 10 Mbits. En outre, les applications
+ nombreux sites se voient maintenant allou&eacute;e une bande passante
+ en sortie bien sup&eacute;rieure &agrave; 10 Mbits. En outre, les applications
web sont devenues beaucoup plus complexes. Les sites classiques
ne proposant que des pages du style brochure sont toujours
- présents, mais le web a souvent évolué vers une plateforme
- exécutant des traitements, et les webmasters peuvent maintenant
+ pr&eacute;sents, mais le web a souvent &eacute;volu&eacute; vers une plateforme
+ ex&eacute;cutant des traitements, et les webmasters peuvent maintenant
mettre en ligne des contenus dynamiques en Perl, PHP ou Java,
- qui exigent un niveau de performances bien supérieur.
+ qui exigent un niveau de performances bien sup&eacute;rieur.
</p>
- <p>C'est pourquoi en dépit des progrès en matière de bandes passantes
- allouées et de rapidité des serveurs, les performances
+ <p>C'est pourquoi en d&eacute;pit des progr&egrave;s en mati&egrave;re de bandes passantes
+ allou&eacute;es et de rapidit&eacute; des serveurs, les performances
des serveurs web et des applications web sont toujours un sujet
- d'actualité. C'est dans ce cadre que cette documentation s'attache à
- présenter de nombreux points concernant les performances des
- serveurs web.
+ d'actualit&eacute;. C'est dans ce cadre que cette documentation s'attache &agrave;
+ pr&eacute;senter de nombreux points concernant les performances des
+ serveurs web.
</p>
-
+
</summary>
-
+
<section id="what-will-and-will-not-be-discussed">
- <title>Ce qui sera abordé et ce qui ne le sera pas</title>
- <p>Ce document se concentre sur l'amélioration des performances
+ <title>Ce qui sera abord&eacute; et ce qui ne le sera pas</title>
+ <p>Ce document se concentre sur l'am&eacute;lioration des performances
via des options facilement accessibles, ainsi que sur les outils
de monitoring. Les outils de monitoring vous permettront de
surveiller le fonctionnement de votre serveur web afin de
- rassembler des informations à propos de ses performances et des
- éventuels problèmes qui s'y rapportent. Nous supposerons
- que votre budget n'est pas illimité ; c'est pourquoi les
- améliorations apportées le seront sans modifier l'infrastructure
- matérielle existante. Vous ne souhaitez probablement pas
- compiler vous-même votre serveur Apache, ni recompiler le noyau
- de votre système d'exploitation ; nous supposerons cependant que
- vous possédez quelques notions à propos du fichier de
- configuration du serveur HTTP Apache.
+ rassembler des informations &agrave; propos de ses performances et des
+ &eacute;ventuels probl&egrave;mes qui s'y rapportent. Nous supposerons
+ que votre budget n'est pas illimit&eacute; ; c'est pourquoi les
+ am&eacute;liorations apport&eacute;es le seront sans modifier l'infrastructure
+ mat&eacute;rielle existante. Vous ne souhaitez probablement pas
+ compiler vous-m&ecirc;me votre serveur Apache, ni recompiler le noyau
+ de votre syst&egrave;me d'exploitation ; nous supposerons cependant que
+ vous poss&eacute;dez quelques notions &agrave; propos du fichier de
+ configuration du serveur HTTP Apache.
</p>
-
+
</section>
-
+
<section id="monitoring-your-server">
<title>Monitoring de votre serveur</title>
- <p>Si vous envisagez de redimensionner ou d'améliorer les performances
- de votre serveur, vous devez tout d'abord observer la manière dont il
- fonctionne. En observant son fonctionnement en conditions réelles ou
- sous une charge créée artificiellement, vous serez en mesure
+ <p>Si vous envisagez de redimensionner ou d'am&eacute;liorer les performances
+ de votre serveur, vous devez tout d'abord observer la mani&egrave;re dont il
+ fonctionne. En observant son fonctionnement en conditions r&eacute;elles ou
+ sous une charge cr&eacute;&eacute;e artificiellement, vous serez en mesure
d'extrapoler son fonctionnement sous une charge accrue, par exemple dans
- le cas où il serait mentionné sur Slashdot. </p>
-
-
+ le cas o&ugrave; il serait mentionn&eacute; sur Slashdot. </p>
+
+
<section id="monitoring-tools">
<title>Outils de monitoring</title>
-
+
<section id="top">
<title>top
</title>
<p>L'outil top est fourni avec Linux et FreeBSD. Solaris
- quant à lui, fournit <code>prstat(1)</code>. Cet outil
- permet de rassembler de nombreuses données statistiques
- à propos du système et de chaque processus en cours
- d'exécution avant de les afficher de manière
- interactive sur votre terminal. Les données affichées
- sont rafraîchies toutes les secondes et varient en
+ quant &agrave; lui, fournit <code>prstat(1)</code>. Cet outil
+ permet de rassembler de nombreuses donn&eacute;es statistiques
+ &agrave; propos du syst&egrave;me et de chaque processus en cours
+ d'ex&eacute;cution avant de les afficher de mani&egrave;re
+ interactive sur votre terminal. Les donn&eacute;es affich&eacute;es
+ sont rafra&icirc;chies toutes les secondes et varient en
fonction de la plateforme, mais elles comportent en
- général la charge moyenne du système, le nombre de
- processus et leur état courant, le pourcentage de temps
- CPU(s) passé à exécuter le code système et utilisateur,
- et l'état de la mémoire virtuelle système. Les données
- affichées pour chaque processus sont en général
+ g&eacute;n&eacute;ral la charge moyenne du syst&egrave;me, le nombre de
+ processus et leur &eacute;tat courant, le pourcentage de temps
+ CPU(s) pass&eacute; &agrave; ex&eacute;cuter le code syst&egrave;me et utilisateur,
+ et l'&eacute;tat de la m&eacute;moire virtuelle syst&egrave;me. Les donn&eacute;es
+ affich&eacute;es pour chaque processus sont en g&eacute;n&eacute;ral
configurables et comprennent le nom et l'identifiant du
- processus, sa priorité et la valeur définie par nice,
- l'empreinte mémoire, et le pourcentage d'utilisation CPU.
+ processus, sa priorit&eacute; et la valeur d&eacute;finie par nice,
+ l'empreinte m&eacute;moire, et le pourcentage d'utilisation CPU.
L'exemple suivant montre plusieurs processus httpd (avec
- les MPM worker et event) s'exécutant sur un système
- Linux (Xen) :
+ les MPM worker et event) s'ex&eacute;cutant sur un syst&egrave;me
+ Linux (Xen) :
</p>
-
+
<example><pre>
top - 23:10:58 up 71 days, 6:14, 4 users, load average: 0.25, 0.53, 0.47
Tasks: 163 total, 1 running, 162 sleeping, 0 stopped, 0 zombie
@@ -153,37 +153,37 @@ Swap: 4194296k total, 860584k used, 3333712k free, 1157552k cached
68 root 15 -5 0 0 0 S 0 0.0 0:06.28 kblockd/0
69 root 15 -5 0 0 0 S 0 0.0 0:00.04 kblockd/1
70 root 15 -5 0 0 0 S 0 0.0 0:00.04 kblockd/2</pre></example>
-
- <p>Top est un merveilleux outil, même s'il est
+
+ <p>Top est un merveilleux outil, m&ecirc;me s'il est
relativement gourmand en ressources (lorsqu'il
- s'exécute, son propre processus se trouve en général
+ s'ex&eacute;cute, son propre processus se trouve en g&eacute;n&eacute;ral
dans le top dix des consommations CPU). Il est
- indispensable pour déterminer la taille d'un processus
- en cours d'exécution, information précieuse lorsque vous
- voudrez déterminer combien de processus httpd vous
- pourrez exécuter sur votre machine. La méthode pour
- effectuer ce calcul est décrite ici : <a
+ indispensable pour d&eacute;terminer la taille d'un processus
+ en cours d'ex&eacute;cution, information pr&eacute;cieuse lorsque vous
+ voudrez d&eacute;terminer combien de processus httpd vous
+ pourrez ex&eacute;cuter sur votre machine. La m&eacute;thode pour
+ effectuer ce calcul est d&eacute;crite ici : <a
href="#sizing-maxClients">calculer MaxClients</a>. Top
- est cependant un outil interactif, et l'exécuter de
- manière continu présente peu ou pas d'avantage.
+ est cependant un outil interactif, et l'ex&eacute;cuter de
+ mani&egrave;re continu pr&eacute;sente peu ou pas d'avantage.
</p>
</section>
<section id="free">
<title>free
</title>
<p>Cette commande n'est disponible que sous Linux. Elle
- indique la mémoire vive et l'espace de swap utilisés.
- Linux alloue la mémoire inutilisée en tant que cache du
- système de fichiers. La commande free montre
- l'utilisation de la mémoire avec et sans ce cache. On
- peut utiliser la commande free pour déterminer la
- quantité de mémoire utilisée par le système, comme
- décrit dans le paragraphe <a
+ indique la m&eacute;moire vive et l'espace de swap utilis&eacute;s.
+ Linux alloue la m&eacute;moire inutilis&eacute;e en tant que cache du
+ syst&egrave;me de fichiers. La commande free montre
+ l'utilisation de la m&eacute;moire avec et sans ce cache. On
+ peut utiliser la commande free pour d&eacute;terminer la
+ quantit&eacute; de m&eacute;moire utilis&eacute;e par le syst&egrave;me, comme
+ d&eacute;crit dans le paragraphe <a
href="#sizing-maxClients">calculer MaxClients</a>.
- L'affichage de la sortie de la commande free ressemble à
- ceci :
+ L'affichage de la sortie de la commande free ressemble &agrave;
+ ceci :
</p>
-
+
<example><pre>
sctemme@brutus:~$ free
total used free shared buffers cached
@@ -192,32 +192,32 @@ Mem: 4026028 3901892 124136 0 253144 841044
Swap: 3903784 12540 3891244
</pre></example>
</section>
-
+
<section id="vmstat">
<title>vmstat
</title>
<p>Cette commande est disponible sur de nombreuses
plateformes de style Unix. Elle affiche un grand nombre
- de données système. Lancée sans argument, elle affiche
- une ligne d'état pour l'instant actuel. Lorsqu'on lui
- ajoute un chiffre, la ligne d'état actuelle est ajoutée à
- intervalles réguliers à l'affichage existant.
+ de donn&eacute;es syst&egrave;me. Lanc&eacute;e sans argument, elle affiche
+ une ligne d'&eacute;tat pour l'instant actuel. Lorsqu'on lui
+ ajoute un chiffre, la ligne d'&eacute;tat actuelle est ajout&eacute;e &agrave;
+ intervalles r&eacute;guliers &agrave; l'affichage existant.
Par exemple, la commande
- <code>vmstat 5</code> ajoute la ligne d'état actuelle
+ <code>vmstat 5</code> ajoute la ligne d'&eacute;tat actuelle
toutes les 5 secondes. La commande vmstat affiche la
- quantité de mémoire virtuelle utilisée, la quantité de
- mémoire échangée avec l'espace de swap en entrée et en
- sortie à chaque seconde, le nombre de processus
- actuellement en cours d'exécution ou inactifs, le nombre
+ quantit&eacute; de m&eacute;moire virtuelle utilis&eacute;e, la quantit&eacute; de
+ m&eacute;moire &eacute;chang&eacute;e avec l'espace de swap en entr&eacute;e et en
+ sortie &agrave; chaque seconde, le nombre de processus
+ actuellement en cours d'ex&eacute;cution ou inactifs, le nombre
d'interruptions et de changements de contexte par
- seconde, et le pourcentage d'utilisation du CPU.
+ seconde, et le pourcentage d'utilisation du CPU.
</p>
<p>
Voici la sortie de la commande <code>vmstat</code>
- pour un serveur inactif :
+ pour un serveur inactif :
</p>
-
-
+
+
<example><pre>
[sctemme@GayDeceiver sctemme]$ vmstat 5 3
procs memory swap io system cpu
@@ -226,11 +226,11 @@ Swap: 3903784 12540 3891244
0 0 0 0 186244 6696 37516 0 0 0 16 41 314 0 0 100
0 0 0 0 186236 6704 37516 0 0 0 9 44 314 0 0 100
</pre></example>
-
- <p>Et voici cette même sortie pour un serveur en charge
- de cent connexions simultanées pour du contenu statique :
+
+ <p>Et voici cette m&ecirc;me sortie pour un serveur en charge
+ de cent connexions simultan&eacute;es pour du contenu statique :
</p>
-
+
<example><pre>
[sctemme@GayDeceiver sctemme]$ vmstat 5 3
procs memory swap io system cpu
@@ -239,167 +239,167 @@ Swap: 3903784 12540 3891244
6 0 1 0 163280 6856 40248 0 0 0 66 6384 1117 42 25 32
11 0 0 0 162780 6864 40436 0 0 0 61 6309 1165 33 28 40
</pre></example>
-
- <p>La première ligne indique des valeurs moyennes depuis
- le dernier redémarrage. Les lignes suivantes donnent des
- informations d'état à intervalles de 5 secondes. Le
- second argument demande à vmstat de générer 3 lignes
- d'état, puis de s'arrêter.
- </p>
-
+
+ <p>La premi&egrave;re ligne indique des valeurs moyennes depuis
+ le dernier red&eacute;marrage. Les lignes suivantes donnent des
+ informations d'&eacute;tat &agrave; intervalles de 5 secondes. Le
+ second argument demande &agrave; vmstat de g&eacute;n&eacute;rer 3 lignes
+ d'&eacute;tat, puis de s'arr&ecirc;ter.
+ </p>
+
</section>
<section id="se-toolkit">
- <title>Boîte à outils SE
+ <title>Bo&icirc;te &agrave; outils SE
</title>
- <p>La boîte à outils SE est une solution de supervision
- pour Solaris. Son langage de programmation est basé sur
- le préprocesseur C et est fourni avec de nombreux
+ <p>La bo&icirc;te &agrave; outils SE est une solution de supervision
+ pour Solaris. Son langage de programmation est bas&eacute; sur
+ le pr&eacute;processeur C et est fourni avec de nombreux
exemples de scripts. Les informations fournies
- peuvent être exploitées en mode console ou en mode
- graphique. Cette boîte à outils peut aussi être programmée pour
- appliquer des règles aux données système. Avec l'exemple
+ peuvent &ecirc;tre exploit&eacute;es en mode console ou en mode
+ graphique. Cette bo&icirc;te &agrave; outils peut aussi &ecirc;tre programm&eacute;e pour
+ appliquer des r&egrave;gles aux donn&eacute;es syst&egrave;me. Avec l'exemple
de script de la Figure 2, Zoom.se, des voyants verts,
oranges ou rouges s'allument lorsque certaines valeurs
- du système dépassent un seuil spécifié. Un autre script
+ du syst&egrave;me d&eacute;passent un seuil sp&eacute;cifi&eacute;. Un autre script
fourni, Virtual Adrian, permet d'affiner les
- performances en tenant compte de ces valeurs.
+ performances en tenant compte de ces valeurs.
</p>
- <p>Depuis sa création, de nombreux propriétaires se sont
- succédés à la tête de la boîte à outils SE, et elle a de
- ce fait largement évolué. Il semble qu'elle ait
- maintenant trouvé sa place chez Sunfreeware.com d'où
- elle peut être téléchargée gratuitement. Il n'y a qu'un
+ <p>Depuis sa cr&eacute;ation, de nombreux propri&eacute;taires se sont
+ succ&eacute;d&eacute;s &agrave; la t&ecirc;te de la bo&icirc;te &agrave; outils SE, et elle a de
+ ce fait largement &eacute;volu&eacute;. Il semble qu'elle ait
+ maintenant trouv&eacute; sa place chez Sunfreeware.com d'o&ugrave;
+ elle peut &ecirc;tre t&eacute;l&eacute;charg&eacute;e gratuitement. Il n'y a qu'un
seul paquet pour Solaris 8, 9 et 10 sur SPARC et x86, et
- il inclut le code source. Le concepteur de la boîte à
- outils SE, Richard Pettit, a fondé une nouvelle sociéte,
+ il inclut le code source. Le concepteur de la bo&icirc;te &agrave;
+ outils SE, Richard Pettit, a fond&eacute; une nouvelle soci&eacute;te,
Captive Metrics4, et a l'intention de mettre sur le
- marché un outil de supervision multiplateforme en Java basé sur
- les mêmes principes que la boîte à outils SE.
+ march&eacute; un outil de supervision multiplateforme en Java bas&eacute; sur
+ les m&ecirc;mes principes que la bo&icirc;te &agrave; outils SE.
</p>
-
-
+
+
</section>
<section id="dtrace">
<title>DTrace
</title>
- <p>Etant donné que DTrace est disponible sous Solaris,
- FreeBSD et OS X, il serait intéressant de l'étudier. Il
- y a aussi le module mod_dtrace pour httpd.
+ <p>Etant donn&eacute; que DTrace est disponible sous Solaris,
+ FreeBSD et OS X, il serait int&eacute;ressant de l'&eacute;tudier. Il
+ y a aussi le module mod_dtrace pour httpd.
</p>
-
-
+
+
</section>
<section id="mod_status">
<title>mod_status
</title>
- <p>Le module mod_status donne un aperçu des performances
- du serveur à un instant donné. Il génère une page HTML
+ <p>Le module mod_status donne un aper&ccedil;u des performances
+ du serveur &agrave; un instant donn&eacute;. Il g&eacute;n&egrave;re une page HTML
comportant, entre autres, le nombre de processus Apache
- en cours d'exécution avec la quantité de données qu'ils
+ en cours d'ex&eacute;cution avec la quantit&eacute; de donn&eacute;es qu'ils
ont servies, ainsi que la charge CPU induite par httpd
- et le reste du système. L'Apache Software Foundation
- utilise elle-même <module>mod_status</module> pour son
+ et le reste du syst&egrave;me. L'Apache Software Foundation
+ utilise elle-m&ecirc;me <module>mod_status</module> pour son
propre <a href="http://apache.org/server-status">site
web</a>. Si vous ajoutez une directive
- <code>ExtendedStatus On</code> à votre fichier
+ <code>ExtendedStatus On</code> &agrave; votre fichier
<code>httpd.conf</code>, la page de
<module>mod_status</module> vous fournira d'avantage
d'informations, au prix d'une consommation de ressources
- légèrement supérieure par requête.
+ l&eacute;g&egrave;rement sup&eacute;rieure par requ&ecirc;te.
</p>
-
-
+
+
</section>
</section>
<section id="web-server-log-files">
<title>Les journaux du serveur web
</title>
- <p>Le moyen le plus efficace pour vérifier la bonne santé et
- le niveau de performance de votre serveur consiste à
- surveiller et analyser les journaux écrits par httpd. La
+ <p>Le moyen le plus efficace pour v&eacute;rifier la bonne sant&eacute; et
+ le niveau de performance de votre serveur consiste &agrave;
+ surveiller et analyser les journaux &eacute;crits par httpd. La
surveillance du journal des erreurs vous permet de
- déterminer les sources d'erreurs, de détecter des attaques
- ou des problèmes de performance. L'analyse du journal des
- accès vous indique le niveau de charge de votre serveur,
+ d&eacute;terminer les sources d'erreurs, de d&eacute;tecter des attaques
+ ou des probl&egrave;mes de performance. L'analyse du journal des
+ acc&egrave;s vous indique le niveau de charge de votre serveur,
quelles sont les ressources les plus populaires, ainsi que
la provenance de vos utilisateurs. Une analyse historique des
- données de journalisation peut vous fournir des informations
- précieuses quant aux tendances d'utilisation de votre
- serveur au cours du temps, ce qui vous permet de prévoir les
- périodes où les besoins en performance risquent de dépasser
- les capacités du serveur.
+ donn&eacute;es de journalisation peut vous fournir des informations
+ pr&eacute;cieuses quant aux tendances d'utilisation de votre
+ serveur au cours du temps, ce qui vous permet de pr&eacute;voir les
+ p&eacute;riodes o&ugrave; les besoins en performance risquent de d&eacute;passer
+ les capacit&eacute;s du serveur.
</p>
-
-
+
+
<section id="ErrorLog">
<title>Journal des erreurs
</title>
<p>Le journal des erreurs peut indiquer que le nombre
maximum de processus actifs ou de fichiers ouverts
- simultanément a été atteint. Le journal des erreurs
- signele aussi le lancement de processus supplémentaires selon un
- taux supérieur à la normale en réponse à
+ simultan&eacute;ment a &eacute;t&eacute; atteint. Le journal des erreurs
+ signele aussi le lancement de processus suppl&eacute;mentaires selon un
+ taux sup&eacute;rieur &agrave; la normale en r&eacute;ponse &agrave;
une augmentation soudaine de la charge. Lorsque le
- serveur démarre, le descripteur de fichier stderr est
- redirigé vers le journal des erreurs, si bien que toute
- erreur rencontrée par httpd après avoir ouvert ses
- fichiers journaux apparaîtra dans ce journal. Consulter
- fréquemment le journal des erreurs est donc une bonne
- habitude.
+ serveur d&eacute;marre, le descripteur de fichier stderr est
+ redirig&eacute; vers le journal des erreurs, si bien que toute
+ erreur rencontr&eacute;e par httpd apr&egrave;s avoir ouvert ses
+ fichiers journaux appara&icirc;tra dans ce journal. Consulter
+ fr&eacute;quemment le journal des erreurs est donc une bonne
+ habitude.
</p>
<p>Lorsque Apache httpd n'a pas encore ouvert ses
- fichiers journaux, tout message d'erreur sera envoyé
+ fichiers journaux, tout message d'erreur sera envoy&eacute;
vers la sortie d'erreur standard stderr. Si vous
- démarrez httpd manuellement, ces messages d'erreur
- apparaîtront sur votre terminal, et vous pourrez les
- utiliser directement pour résoudre les problèmes de
- votre serveur. Si httpd est lancé via un script de
- démarrage, la destination de ces messages d'erreur
- dépend de leur conception.
- <code>/var/log/messages</code> est alors le premier fichier à
- consulter. Sous Windows, ces messages d'erreur précoces
- sont écrits dans le journal des évènements des
- applications, qui peut être visualisé via l'observateur
- d'évènements dans les outils d'administration.
+ d&eacute;marrez httpd manuellement, ces messages d'erreur
+ appara&icirc;tront sur votre terminal, et vous pourrez les
+ utiliser directement pour r&eacute;soudre les probl&egrave;mes de
+ votre serveur. Si httpd est lanc&eacute; via un script de
+ d&eacute;marrage, la destination de ces messages d'erreur
+ d&eacute;pend de leur conception.
+ <code>/var/log/messages</code> est alors le premier fichier &agrave;
+ consulter. Sous Windows, ces messages d'erreur pr&eacute;coces
+ sont &eacute;crits dans le journal des &eacute;v&egrave;nements des
+ applications, qui peut &ecirc;tre visualis&eacute; via l'observateur
+ d'&eacute;v&egrave;nements dans les outils d'administration.
</p>
<p>
- Le journal des erreurs est configuré via les
+ Le journal des erreurs est configur&eacute; via les
directives de configuration <directive
module="core">ErrorLog</directive> et <directive
module="core">LogLevel</directive>. Le journal des
erreurs de la configuration du serveur principal de
- httpd reçoit les messages d'erreur concernant
- l'ensemble du serveur : démarrage, arrêt, crashes,
- lancement de processus supplémentaires excessif,
+ httpd re&ccedil;oit les messages d'erreur concernant
+ l'ensemble du serveur : d&eacute;marrage, arr&ecirc;t, crashes,
+ lancement de processus suppl&eacute;mentaires excessif,
etc... La directive <directive
- module="core">ErrorLog</directive> peut aussi être
- utilisée dans les blocs de configuration des
+ module="core">ErrorLog</directive> peut aussi &ecirc;tre
+ utilis&eacute;e dans les blocs de configuration des
serveurs virtuels. Le journal des erreurs d'un
- serveur virtuel ne reçoit que les messages d'erreur
- spécifiques à ce serveur virtuel, comme les erreurs
+ serveur virtuel ne re&ccedil;oit que les messages d'erreur
+ sp&eacute;cifiques &agrave; ce serveur virtuel, comme les erreurs
d'authentification et les erreurs du style 'File not
- Found'.
+ Found'.
</p>
<p>Dans le cas d'un serveur accessible depuis Internet,
- attendez-vous à voir de nombreuses tentatives
+ attendez-vous &agrave; voir de nombreuses tentatives
d'exploitation et attaques de vers dans le journal des
erreurs. La plupart d'entre elles ciblent des serveurs
- autres qu'Apache, mais dans l'état actuel des choses,
+ autres qu'Apache, mais dans l'&eacute;tat actuel des choses,
les scripts se contentent d'envoyer leurs attaques vers
tout port ouvert, sans tenir compte du serveur web
- effectivement en cours d'exécution ou du type
- des applications installées. Vous pouvez bloquer ces
+ effectivement en cours d'ex&eacute;cution ou du type
+ des applications install&eacute;es. Vous pouvez bloquer ces
tentatives d'attaque en utilisant un pare-feu ou le
module <a
href="http://www.modsecurity.org/">mod_security</a>,
- mais ceci dépasse la portée de cette discussion.
+ mais ceci d&eacute;passe la port&eacute;e de cette discussion.
</p>
<p>
La directive <directive
- module="core">LogLevel</directive> permet de définir
- le niveau de détail des messages enregistrés dans
+ module="core">LogLevel</directive> permet de d&eacute;finir
+ le niveau de d&eacute;tail des messages enregistr&eacute;s dans
les journaux. Il existe huit niveaux de
- journalisation :
+ journalisation :
</p>
<table>
<tr>
@@ -415,7 +415,7 @@ Swap: 3903784 12540 3891244
<p>emerg</p>
</td>
<td>
- <p>Urgence - le système est inutilisable.</p>
+ <p>Urgence - le syst&egrave;me est inutilisable.</p>
</td>
</tr>
<tr>
@@ -423,8 +423,8 @@ Swap: 3903784 12540 3891244
<p>alert</p>
</td>
<td>
- <p>Une action doit être entreprise
- immédiatement.</p>
+ <p>Une action doit &ecirc;tre entreprise
+ imm&eacute;diatement.</p>
</td>
</tr>
<tr>
@@ -456,7 +456,7 @@ Swap: 3903784 12540 3891244
<p>notice</p>
</td>
<td>
- <p>Evènement normal, mais important.</p>
+ <p>Ev&egrave;nement normal, mais important.</p>
</td>
</tr>
<tr>
@@ -472,61 +472,61 @@ Swap: 3903784 12540 3891244
<p>debug</p>
</td>
<td>
- <p>Messages de débogage.</p>
+ <p>Messages de d&eacute;bogage.</p>
</td>
</tr>
</table>
- <p>Le niveau de journalisation par défaut est warn. Un
- serveur en production ne doit pas s'exécuter en mode
- debug, mais augmenter le niveau de détail dans le
- journal des erreurs peut s'avérer utile pour résoudre
- certains problèmes. A partir de la
+ <p>Le niveau de journalisation par d&eacute;faut est warn. Un
+ serveur en production ne doit pas s'ex&eacute;cuter en mode
+ debug, mais augmenter le niveau de d&eacute;tail dans le
+ journal des erreurs peut s'av&eacute;rer utile pour r&eacute;soudre
+ certains probl&egrave;mes. A partir de la
version 2.3.8, la directive <directive
- module="core">LogLevel</directive> peut être définie au
- niveau de chaque module :
+ module="core">LogLevel</directive> peut &ecirc;tre d&eacute;finie au
+ niveau de chaque module :
</p>
-
+
<highlight language="config">
LogLevel debug mod_ssl:warn
</highlight>
-
+
<p>
Dans cet exemple, l'ensemble du serveur est en mode
debug, sauf le module <module>mod_ssl</module>
- qui a tendance à être très bavard.
+ qui a tendance &agrave; &ecirc;tre tr&egrave;s bavard.
</p>
-
-
+
+
</section>
<section id="AccessLog">
- <title>Journal des accès
+ <title>Journal des acc&egrave;s
</title>
- <p>Apache httpd garde la trace de toutes les requêtes
- qu'il reçoit dans son journal des accès. En plus de
- l'heure et de la nature d'une requête, httpd peut
+ <p>Apache httpd garde la trace de toutes les requ&ecirc;tes
+ qu'il re&ccedil;oit dans son journal des acc&egrave;s. En plus de
+ l'heure et de la nature d'une requ&ecirc;te, httpd peut
enregistrer l'adresse IP du client, la date et l'heure
- de la requête, le résultat et quantité d'autres
- informations. Les différents formats de journaux sont
- documentés dans le manuel. Le fichier concerne par
- défaut le serveur principal, mais il peut être configuré
+ de la requ&ecirc;te, le r&eacute;sultat et quantit&eacute; d'autres
+ informations. Les diff&eacute;rents formats de journaux sont
+ document&eacute;s dans le manuel. Le fichier concerne par
+ d&eacute;faut le serveur principal, mais il peut &ecirc;tre configur&eacute;
pour chaque serveur virtuel via les directives de
configuration <directive
module="mod_log_config">TransferLog</directive> ou
<directive
- module="mod_log_config">CustomLog</directive>.
+ module="mod_log_config">CustomLog</directive>.
</p>
<p>De nombreux programmes libres ou commerciaux
- permettent d'analyser les journaux d'accès. Analog et
+ permettent d'analyser les journaux d'acc&egrave;s. Analog et
Webalyser sont des programmes d'analyse libres parmi les
plus populaires. L'analyse des journaux doit s'effectuer
hors ligne afin de ne pas surcharger le serveur web avec
le traitement des fichiers journaux. La plupart des
programmes d'analyse des journaux sont compatibles avec le format
de journal "Common". Voici une description des
- différents champs présents dans une entrée du journal :
+ diff&eacute;rents champs pr&eacute;sents dans une entr&eacute;e du journal :
</p>
-
-
+
+
<example><pre>
195.54.228.42 - - [24/Mar/2007:23:05:11 -0400] "GET /sander/feed/ HTTP/1.1" 200 9747
64.34.165.214 - - [24/Mar/2007:23:10:11 -0400] "GET /sander/feed/atom HTTP/1.1" 200 9068
@@ -536,7 +536,7 @@ Swap: 3903784 12540 3891244
74.6.72.187 - - [24/Mar/2007:23:18:11 -0400] "GET /sander/2006/09/27/44/ HTTP/1.0" 200 14172
74.6.72.229 - - [24/Mar/2007:23:24:22 -0400] "GET /sander/2006/11/21/os-java/ HTTP/1.0" 200 13457
</pre></example>
-
+
<table>
<tr>
<td>
@@ -557,19 +557,19 @@ Swap: 3903784 12540 3891244
<p>195.54.228.42</p>
</td>
<td>
- <p>Adresse IP d'où provient la requête</p>
+ <p>Adresse IP d'o&ugrave; provient la requ&ecirc;te</p>
</td>
</tr>
<tr>
<td>
- <p>Identité RFC 1413</p>
+ <p>Identit&eacute; RFC 1413</p>
</td>
<td>
<p>-</p>
</td>
<td>
- <p>Identité de l'utilisateur distant renvoyée
- par son démon identd</p>
+ <p>Identit&eacute; de l'utilisateur distant renvoy&eacute;e
+ par son d&eacute;mon identd</p>
</td>
</tr>
<tr>
@@ -592,29 +592,29 @@ Swap: 3903784 12540 3891244
<p>[24/Mar/2007:23:05:11 -0400]</p>
</td>
<td>
- <p>Date et heure de la requête</p>
+ <p>Date et heure de la requ&ecirc;te</p>
</td>
</tr>
<tr>
<td>
- <p>Requête</p>
+ <p>Requ&ecirc;te</p>
</td>
<td>
<p>&quot;GET /sander/feed/ HTTP/1.1&quot;</p>
</td>
<td>
- <p>La requête proprement dite</p>
+ <p>La requ&ecirc;te proprement dite</p>
</td>
</tr>
<tr>
<td>
- <p>Code d'état</p>
+ <p>Code d'&eacute;tat</p>
</td>
<td>
<p>200</p>
</td>
<td>
- <p>Code d'état renvoyé avec la réponse</p>
+ <p>Code d'&eacute;tat renvoy&eacute; avec la r&eacute;ponse</p>
</td>
</tr>
<tr>
@@ -625,39 +625,39 @@ Swap: 3903784 12540 3891244
<p>9747</p>
</td>
<td>
- <p>Total des octets transférés sans les
- en-têtes</p>
+ <p>Total des octets transf&eacute;r&eacute;s sans les
+ en-t&ecirc;tes</p>
</td>
</tr>
</table>
-
+
</section>
<section id="rotating-log-files">
<title>Rotation des fichiers journaux
</title>
<p>Il y a de nombreuses raisons pour mettre en oeuvre la
- rotation des fichiers journaux. Même si pratiquement
- plus aucun système d'exploitation n'impose une limite de
+ rotation des fichiers journaux. M&ecirc;me si pratiquement
+ plus aucun syst&egrave;me d'exploitation n'impose une limite de
taille pour les fichiers de deux GigaOctets, avec le
temps, les fichiers journaux deviennent trop gros pour
- pouvoir être traités. En outre, toute analyse de journal
- ne doit pas être effectuée sur un fichier dans lequel le
- serveur est en train d'écrire. Une rotation périodique
+ pouvoir &ecirc;tre trait&eacute;s. En outre, toute analyse de journal
+ ne doit pas &ecirc;tre effectu&eacute;e sur un fichier dans lequel le
+ serveur est en train d'&eacute;crire. Une rotation p&eacute;riodique
des fichiers journaux permet de faciliter leur analyse,
- et de se faire une idée plus précise des habitudes
- d'utilisation.
+ et de se faire une id&eacute;e plus pr&eacute;cise des habitudes
+ d'utilisation.
</p>
- <p>Sur les systèmes unix, vous pouvez simplement
+ <p>Sur les syst&egrave;mes unix, vous pouvez simplement
effectuer cette rotation en changeant le nom du fichier
- journal via la commande mv. Le serveur continuera à
- écrire dans le fichier ouvert même s'il a changé de nom.
- Lorsque vous enverrez un signal de redémarrage
+ journal via la commande mv. Le serveur continuera &agrave;
+ &eacute;crire dans le fichier ouvert m&ecirc;me s'il a chang&eacute; de nom.
+ Lorsque vous enverrez un signal de red&eacute;marrage
"Graceful" au serveur, il ouvrira un nouveau fichier
- journal avec le nom configuré par défaut. Par exemple,
- vous pouvez écrire un script de ce style pour cron :
+ journal avec le nom configur&eacute; par d&eacute;faut. Par exemple,
+ vous pouvez &eacute;crire un script de ce style pour cron :
</p>
-
-
+
+
<example>
APACHE=/usr/local/apache2<br />
HTTPD=$APACHE/bin/httpd<br />
@@ -665,789 +665,789 @@ Swap: 3903784 12540 3891244
$APACHE/logarchive/access_log-`date +%F`<br />
$HTTPD -k graceful
</example>
-
+
<p>Cette approche fonctionne aussi sous Windows, mais
avec moins de souplesse. Alors que le processus httpd de
- votre serveur sous Windows continuera à écrire dans le
- fichier journal une fois ce dernier renommé, le service
- Windows qui exécute Apache n'est pas en mesure
- d'effectuer un redémarrage graceful. Sous Windows, le
- redémarrage d'un service consiste simplement à l'arrêter
- et à le démarrer à nouveau, alors qu'avec un redémarrage
+ votre serveur sous Windows continuera &agrave; &eacute;crire dans le
+ fichier journal une fois ce dernier renomm&eacute;, le service
+ Windows qui ex&eacute;cute Apache n'est pas en mesure
+ d'effectuer un red&eacute;marrage graceful. Sous Windows, le
+ red&eacute;marrage d'un service consiste simplement &agrave; l'arr&ecirc;ter
+ et &agrave; le d&eacute;marrer &agrave; nouveau, alors qu'avec un red&eacute;marrage
graceful, les processus enfants terminent
- le traitement des requêtes en cours avant de s'arrêter,
- et le serveur httpd est alors immédiatement à
- nouveau disponible pour traiter les nouvelles requêtes.
- Sous Windows, le processus d'arrêt/redémarrage du
- service interrompt les traitements de requêtes en cours,
- et le serveur demeure indisponible jusqu'à ce qu'il ait
- terminé son redémarrage. Vous devez donc tenir compte de
+ le traitement des requ&ecirc;tes en cours avant de s'arr&ecirc;ter,
+ et le serveur httpd est alors imm&eacute;diatement &agrave;
+ nouveau disponible pour traiter les nouvelles requ&ecirc;tes.
+ Sous Windows, le processus d'arr&ecirc;t/red&eacute;marrage du
+ service interrompt les traitements de requ&ecirc;tes en cours,
+ et le serveur demeure indisponible jusqu'&agrave; ce qu'il ait
+ termin&eacute; son red&eacute;marrage. Vous devez donc tenir compte de
toutes ces contraintes lorsque vous planifiez un
- redémarrage.
+ red&eacute;marrage.
</p>
<p>
- Une seconde approche consiste à utiliser la
+ Une seconde approche consiste &agrave; utiliser la
redirection des logs. Les directives <directive
module="mod_log_config">CustomLog</directive>,
<directive
module="mod_log_config">TransferLog</directive> ou
<directive module="core">ErrorLog</directive>
- permettent de rediriger les données de journalisation
- vers tout programme via le caractère pipe
- (<code>|</code>) comme dans cet exemple :
+ permettent de rediriger les donn&eacute;es de journalisation
+ vers tout programme via le caract&egrave;re pipe
+ (<code>|</code>) comme dans cet exemple :
</p>
-
+
<example>CustomLog "|/usr/local/apache2/bin/rotatelogs
/var/log/access_log 86400" common
</example>
-
+
<p>Le programme cible de la redirection recevra alors les
- données de journalisation d'Apache sur son entrée
+ donn&eacute;es de journalisation d'Apache sur son entr&eacute;e
standard stdin, et pourra en faire ce qu'il voudra. Le
programme rotatelogs fourni avec Apache effectue une
- rotation des journaux de manière transparente en
- fonction du temps ou de la quantité de données écrites,
+ rotation des journaux de mani&egrave;re transparente en
+ fonction du temps ou de la quantit&eacute; de donn&eacute;es &eacute;crites,
et archive l'ancien fichier journal en ajoutant un
- suffixe d'horodatage à son nom. Cependant, si cette
- méthode fonctionne de manière satisfaisante sur les
- plateformes de style unix, il n'en est pas de même sous
- Windows.
+ suffixe d'horodatage &agrave; son nom. Cependant, si cette
+ m&eacute;thode fonctionne de mani&egrave;re satisfaisante sur les
+ plateformes de style unix, il n'en est pas de m&ecirc;me sous
+ Windows.
</p>
-
-
+
+
</section>
<section id="logging-and-performance">
<title>Journalisation et performances
</title>
- <p>L'écriture d'entrées dans les fichiers journaux est
+ <p>L'&eacute;criture d'entr&eacute;es dans les fichiers journaux est
consommatrice de ressources, mais l'importance de ces
- données est telle qu'il est fortement déconseillé de
- désactiver la journalisation. Pour optimiser les
+ donn&eacute;es est telle qu'il est fortement d&eacute;conseill&eacute; de
+ d&eacute;sactiver la journalisation. Pour optimiser les
performances, vous devez enregistrer vos journaux sur un
- disque physique différent de celui où se situe votre
- site web car les modes d'accès sont très différents. La
- lecture de données sur un disque possède un caractère
- essentiellement aléatoire, alors que l'écriture dans les
- fichiers journaux s'effectue de manière séquentielle.
+ disque physique diff&eacute;rent de celui o&ugrave; se situe votre
+ site web car les modes d'acc&egrave;s sont tr&egrave;s diff&eacute;rents. La
+ lecture de donn&eacute;es sur un disque poss&egrave;de un caract&egrave;re
+ essentiellement al&eacute;atoire, alors que l'&eacute;criture dans les
+ fichiers journaux s'effectue de mani&egrave;re s&eacute;quentielle.
</p>
<p>
- Ne définissez jamais la directive <directive
- module="core">LogLevel</directive> à debug pour un
+ Ne d&eacute;finissez jamais la directive <directive
+ module="core">LogLevel</directive> &agrave; debug pour un
serveur en production. En effet, lorsque ce niveau de
- journalisation est défini, une grande quantité de
- données est écrite dans le journal des erreurs, y
- compris, dans le cas d'un accès SSL, toutes les
- opérations de lecture/écriture de la négociation de la
- connexion. Les implications en matière de performances
- sont donc importantes et vous devez plutôt utiliser le
- niveau de journalisation warn.
- </p>
- <p>Si votre serveur possède plus d'un serveur virtuel,
- il est conseillé d'attribuer un journal des accès séparé à
+ journalisation est d&eacute;fini, une grande quantit&eacute; de
+ donn&eacute;es est &eacute;crite dans le journal des erreurs, y
+ compris, dans le cas d'un acc&egrave;s SSL, toutes les
+ op&eacute;rations de lecture/&eacute;criture de la n&eacute;gociation de la
+ connexion. Les implications en mati&egrave;re de performances
+ sont donc importantes et vous devez plut&ocirc;t utiliser le
+ niveau de journalisation warn.
+ </p>
+ <p>Si votre serveur poss&egrave;de plus d'un serveur virtuel,
+ il est conseill&eacute; d'attribuer un journal des acc&egrave;s s&eacute;par&eacute; &agrave;
chacun d'entre eux, ce qui a pour effet de faciliter son
- exploitation ultérieure. Par contre, si votre serveur
- possède un grand nombre de serveurs virtuels, le nombre
- de fichiers journaux à ouvrir va représenter une
+ exploitation ult&eacute;rieure. Par contre, si votre serveur
+ poss&egrave;de un grand nombre de serveurs virtuels, le nombre
+ de fichiers journaux &agrave; ouvrir va repr&eacute;senter une
consommation de ressources importante pour votre
- système, et il sera peut-être alors plus judicieux
- d'utiliser un seul fichier journal avec l'aménagement
- suivant : utiliser l'élément de format <code>%v</code>
- en tête de votre directive <directive
+ syst&egrave;me, et il sera peut-&ecirc;tre alors plus judicieux
+ d'utiliser un seul fichier journal avec l'am&eacute;nagement
+ suivant : utiliser l'&eacute;l&eacute;ment de format <code>%v</code>
+ en t&ecirc;te de votre directive <directive
module="mod_log_config">LogFormat</directive> (et de
votre directive <directive
module="core">ErrorLog</directive> depuis la version
2.3.8) afin que httpd enregistre le nom du serveur
- virtuel qui traite la requête ou l'erreur au début de
- chaque entrée du journal. Un simple script Perl peut
- alors éclater le journal en fichiers spécifiques à
- chaque serveur virtuel après sa rotation ; Apache
- fournit un tel script dans le répertoire
+ virtuel qui traite la requ&ecirc;te ou l'erreur au d&eacute;but de
+ chaque entr&eacute;e du journal. Un simple script Perl peut
+ alors &eacute;clater le journal en fichiers sp&eacute;cifiques &agrave;
+ chaque serveur virtuel apr&egrave;s sa rotation ; Apache
+ fournit un tel script dans le r&eacute;pertoire
<code>support/split-logfile</code>.
</p>
<p>
Vous pouvez aussi utiliser la directive <directive
module="mod_log_config">BufferedLogs</directive>
- pour qu'Apache conserve en mémoire plusieurs entrées
- de journal avant de les écrire sur disque. Gardez
- cependant à l'esprit que si les performances peuvent
- s'en trouver améliorées, la chronologie des
- évènements enregistrés peut quant à elle s'en
- trouver affectée.
- </p>
-
-
+ pour qu'Apache conserve en m&eacute;moire plusieurs entr&eacute;es
+ de journal avant de les &eacute;crire sur disque. Gardez
+ cependant &agrave; l'esprit que si les performances peuvent
+ s'en trouver am&eacute;lior&eacute;es, la chronologie des
+ &eacute;v&egrave;nements enregistr&eacute;s peut quant &agrave; elle s'en
+ trouver affect&eacute;e.
+ </p>
+
+
</section>
</section>
<section id="generating-a-test-load">
<title>Mise en oeuvre d'une charge de test
</title>
<p>Il est interessant de mettre en oeuvre une charge de test
- afin d'évaluer les performances du système en conditions
- réelles de fonctionnement. A cet effet, il existe des
+ afin d'&eacute;valuer les performances du syst&egrave;me en conditions
+ r&eacute;elles de fonctionnement. A cet effet, il existe des
paquets commerciaux comme <a
href="http://learnloadrunner.com/">LoadRunner</a>, mais
- aussi de nombreux outils libres permettant de générer une
- charge de test pour votre serveur web.
+ aussi de nombreux outils libres permettant de g&eacute;n&eacute;rer une
+ charge de test pour votre serveur web.
</p>
<ul>
- <li>Apache est fourni avec un programme de test nommé ab
- (initiales de Apache Bench). Ce dernier peut générer une
- charge de serveur web consistant à demander le même
- fichier de manière répétitive à un rythme rapide. Vous
- pouvez spécifier le nombre de connexions simultanées, et
- choisir entre une durée de fonctionnement ou un nombre
- de requêtes.
+ <li>Apache est fourni avec un programme de test nomm&eacute; ab
+ (initiales de Apache Bench). Ce dernier peut g&eacute;n&eacute;rer une
+ charge de serveur web consistant &agrave; demander le m&ecirc;me
+ fichier de mani&egrave;re r&eacute;p&eacute;titive &agrave; un rythme rapide. Vous
+ pouvez sp&eacute;cifier le nombre de connexions simultan&eacute;es, et
+ choisir entre une dur&eacute;e de fonctionnement ou un nombre
+ de requ&ecirc;tes.
</li>
- <li>http load11 est un autre exemple de générateur de
+ <li>http load11 est un autre exemple de g&eacute;n&eacute;rateur de
charge libre. Ce programme fonctionne avec un ficher
- d'URLs et peut être compilé avec le support SSL.
+ d'URLs et peut &ecirc;tre compil&eacute; avec le support SSL.
</li>
- <li>L'Apache Software Foundation propose un outil nommé
- flood12. Flood est un programme assez sophistiqué que
- l'on configure via un fichier XML.
+ <li>L'Apache Software Foundation propose un outil nomm&eacute;
+ flood12. Flood est un programme assez sophistiqu&eacute; que
+ l'on configure via un fichier XML.
</li>
<li>Pour finir, JMeter13, un sous-projet de Jakarta, est
- un outil de test en charge entièrement en Java. Alors
- que les premières versions de cette application étaient
+ un outil de test en charge enti&egrave;rement en Java. Alors
+ que les premi&egrave;res versions de cette application &eacute;taient
lentes et difficiles d'utilisation, la version 2.1.1
- actuelle semble être plus souple d'utilisation et
- efficace.
+ actuelle semble &ecirc;tre plus souple d'utilisation et
+ efficace.
</li>
<li>
- <p>Des projets externes à l'ASF et réputés
+ <p>Des projets externes &agrave; l'ASF et r&eacute;put&eacute;s
relativement corrects : grinder, httperf, tsung, <a
href="http://funkload.nuxeo.org/">FunkLoad</a>.
</p>
</li>
</ul>
- <p>Lorsque vous appliquez une charge de test à votre serveur
- web, gardez à l'esprit que si ce dernier est en production,
- la charge de test peut en affecter négativement les
- performances. En outre, le transfert de données
- supplémentaires induit peut être comptabilisé dans le
- quota mensuel qui vous a été éventuellement alloué.
+ <p>Lorsque vous appliquez une charge de test &agrave; votre serveur
+ web, gardez &agrave; l'esprit que si ce dernier est en production,
+ la charge de test peut en affecter n&eacute;gativement les
+ performances. En outre, le transfert de donn&eacute;es
+ suppl&eacute;mentaires induit peut &ecirc;tre comptabilis&eacute; dans le
+ quota mensuel qui vous a &eacute;t&eacute; &eacute;ventuellement allou&eacute;.
</p>
-
-
+
+
</section>
</section>
<section id="configuring-for-performance">
<title>Configuration dans une optique de performances
</title>
-
-
+
+
<section id="apache-configuration">
<title>Configuration de httpd
</title>
- <p>httpd version 2.2 est par défaut un serveur web avec des
- processus enfants lancés au préalable. Au démarrage du
+ <p>httpd version 2.2 est par d&eacute;faut un serveur web avec des
+ processus enfants lanc&eacute;s au pr&eacute;alable. Au d&eacute;marrage du
serveur, le processus parent lance un certain nombre de
- processus enfants et ce sont eux qui seront chargés de traiter les
- requêtes. Mais avec httpd version 2.0 est apparu le concept
- de module multi-process (MPM). Les développeurs purent alors
- écrire des MPMs qui pouvaient fonctionner avec l'architecture
- à base de processus ou de threads de leur système
- d'exploitation spécifique. Apache 2 est fourni avec des MPMs
- spécifiques pour Windows, OS/2, Netware et BeOS. Pour les
+ processus enfants et ce sont eux qui seront charg&eacute;s de traiter les
+ requ&ecirc;tes. Mais avec httpd version 2.0 est apparu le concept
+ de module multi-process (MPM). Les d&eacute;veloppeurs purent alors
+ &eacute;crire des MPMs qui pouvaient fonctionner avec l'architecture
+ &agrave; base de processus ou de threads de leur syst&egrave;me
+ d'exploitation sp&eacute;cifique. Apache 2 est fourni avec des MPMs
+ sp&eacute;cifiques pour Windows, OS/2, Netware et BeOS. Pour les
plateformes de style unix, les deux MPMS les plus connus
- sont Prefork et Worker. Le MPM Prefork offre le même modèle
- de processus enfants prélancés que celui d'Apache 1.3. Le
- MPM Worker quant à lui, lance un nombre de processus enfants
- moins important, mais attribue à chacun d'entre eux un
- certain nombre de threads pour traiter les requêtes. Avec la
- version 2.4, le MPM n'est plus défini à la compilation,
- mais peut être chargé à l'exécution via la directive
+ sont Prefork et Worker. Le MPM Prefork offre le m&ecirc;me mod&egrave;le
+ de processus enfants pr&eacute;lanc&eacute;s que celui d'Apache 1.3. Le
+ MPM Worker quant &agrave; lui, lance un nombre de processus enfants
+ moins important, mais attribue &agrave; chacun d'entre eux un
+ certain nombre de threads pour traiter les requ&ecirc;tes. Avec la
+ version 2.4, le MPM n'est plus d&eacute;fini &agrave; la compilation,
+ mais peut &ecirc;tre charg&eacute; &agrave; l'ex&eacute;cution via la directive
<directive module="core">LoadModule</directive>. Le MPM par
- défaut pour la version 2.4 est le MPM event.
+ d&eacute;faut pour la version 2.4 est le MPM event.
</p>
- <p>Le nombre maximum de process, à savoir le nombre de processus
- enfants prélancés et/ou de threads, donne une approximation
- du nombre de requêtes que votre serveur peut traiter
- simultanément. Ce n'est cependant qu'une estimation car le
+ <p>Le nombre maximum de process, &agrave; savoir le nombre de processus
+ enfants pr&eacute;lanc&eacute;s et/ou de threads, donne une approximation
+ du nombre de requ&ecirc;tes que votre serveur peut traiter
+ simultan&eacute;ment. Ce n'est cependant qu'une estimation car le
noyau peut mettre en file d'attente des tentatives de
- connexion à votre serveur. Lorsque votre site approche de la
+ connexion &agrave; votre serveur. Lorsque votre site approche de la
saturation et si le nombre maximum de process est atteint, la
machine n'impose pas de limite absolue au
- delà de laquelle les clients se verront refuser l'accès.
- Cependant, lorsque les requêtes commencent à être mises en
- file d'attente, les performances du système se dégradent
- rapidement.
+ del&agrave; de laquelle les clients se verront refuser l'acc&egrave;s.
+ Cependant, lorsque les requ&ecirc;tes commencent &agrave; &ecirc;tre mises en
+ file d'attente, les performances du syst&egrave;me se d&eacute;gradent
+ rapidement.
</p>
- <p>Enfin, si le serveur httpd en question n'exécute aucun
+ <p>Enfin, si le serveur httpd en question n'ex&eacute;cute aucun
code tiers via <code>mod_php</code>, <code>mod_perl</code>,
etc..., nous recommandons l'utilisation de
- <module outdated="true">mpm_event</module>. Ce MPM est idéal pour les
- situations où httpd sert d'intermédiaire entre les clients
- et des serveurs d'arrière-plan qui accomplissent le travail
+ <module outdated="true">mpm_event</module>. Ce MPM est id&eacute;al pour les
+ situations o&ugrave; httpd sert d'interm&eacute;diaire entre les clients
+ et des serveurs d'arri&egrave;re-plan qui accomplissent le travail
proprement dit (par exemple en mode mandataire ou cache).
</p>
-
-
+
+
<section id="MaxClients">
<title>MaxClients
</title>
<p>La directive <code>MaxClients</code> permet de
- spécifier le nombre maximum de process que votre serveur
- pourra créer. Deux autres directives lui sont associées
+ sp&eacute;cifier le nombre maximum de process que votre serveur
+ pourra cr&eacute;er. Deux autres directives lui sont associ&eacute;es
: <code>MinSpareServers</code> et
<code>MaxSpareServers</code>, qui permettent d'encadrer
- le nombre de process que httpd garde en réserve pour
- traiter les requêtes. Le nombre total de process que
- httpd peut créer peut
- être défini via la directive <code>ServerLimit</code>.
+ le nombre de process que httpd garde en r&eacute;serve pour
+ traiter les requ&ecirc;tes. Le nombre total de process que
+ httpd peut cr&eacute;er peut
+ &ecirc;tre d&eacute;fini via la directive <code>ServerLimit</code>.
</p>
-
-
+
+
</section>
<section id="spinning-threads">
<title>Rotation des threads
</title>
- <p>Les directives ci-dessus suffisent pour définir les
+ <p>Les directives ci-dessus suffisent pour d&eacute;finir les
limites des nombres de process dans le cas du MPM Prefork.
- Cependant, si vous utilisez un MPM à base de threads, la
- situation est un peu plus compliquée. Les MPMs à base de
+ Cependant, si vous utilisez un MPM &agrave; base de threads, la
+ situation est un peu plus compliqu&eacute;e. Les MPMs &agrave; base de
threads supportent la directive
<code>ThreadsPerChild</code>. httpd impose le fait que
- <code>MaxClients</code> doit être divisible par
+ <code>MaxClients</code> doit &ecirc;tre divisible par
<code>ThreadsPerChild</code>. Si les valeurs que vous
- attribuez à ces deux directives ne respectent pas cette
- règle, httpd affichera un message d'erreur et corrigera
+ attribuez &agrave; ces deux directives ne respectent pas cette
+ r&egrave;gle, httpd affichera un message d'erreur et corrigera
la valeur de la directive <code>ThreadsPerChild</code>
- en la diminuant jusqu'à ce que la valeur de la directive
+ en la diminuant jusqu'&agrave; ce que la valeur de la directive
<code>MaxClients</code> soit divisible par elle.
</p>
-
-
+
+
</section>
<section id="sizing-maxClients">
<title>Choix de la valeur de MaxClients
</title>
- <p>Idéalement, le nombre maximum de processus devrait
- être choisi de façon à ce que toute la mémoire système
- soit utilisée, sans la dépasser. En effet, si votre
- système est surchargé au point de devoir faire appel de
- manière intensive au swap (utilisation de la mémoire
- disque), les performances vont se dégrader rapidement.
- La formule permettant de déterminer la valeur de
+ <p>Id&eacute;alement, le nombre maximum de processus devrait
+ &ecirc;tre choisi de fa&ccedil;on &agrave; ce que toute la m&eacute;moire syst&egrave;me
+ soit utilis&eacute;e, sans la d&eacute;passer. En effet, si votre
+ syst&egrave;me est surcharg&eacute; au point de devoir faire appel de
+ mani&egrave;re intensive au swap (utilisation de la m&eacute;moire
+ disque), les performances vont se d&eacute;grader rapidement.
+ La formule permettant de d&eacute;terminer la valeur de
<directive module="mpm_common"
name="MaxRequestWorkers">MaxClients</directive>
- est assez simple :
+ est assez simple :
</p>
-
+
<example>
- MaxClients = (RAM totale − RAM système − RAM pour
- les programmes externes) divisé par la RAM nécessaire pour
+ MaxClients = (RAM totale − RAM syst&egrave;me − RAM pour
+ les programmes externes) divis&eacute; par la RAM n&eacute;cessaire pour
chaque processus enfant.
</example>
-
- <p>L'observation est la meilleure manière de déterminer
- les différentes quantités de mémoire allouées au
- système, aux programmes externes et aux processus httpd
- : à cet effet, vous pouvez utiliser les commandes top et
- free décrites plus haut pour étudier l'empreinte mémoire
- du système lorsque le serveur web n'est pas en cours
- d'exécution. Vous pouvez aussi étudier l'empreinte d'un
+
+ <p>L'observation est la meilleure mani&egrave;re de d&eacute;terminer
+ les diff&eacute;rentes quantit&eacute;s de m&eacute;moire allou&eacute;es au
+ syst&egrave;me, aux programmes externes et aux processus httpd
+ : &agrave; cet effet, vous pouvez utiliser les commandes top et
+ free d&eacute;crites plus haut pour &eacute;tudier l'empreinte m&eacute;moire
+ du syst&egrave;me lorsque le serveur web n'est pas en cours
+ d'ex&eacute;cution. Vous pouvez aussi &eacute;tudier l'empreinte d'un
processus type du serveur web via la commande top ; en
- effet, la plupart des implémentations de cette commande
- présentent une colonne Mémoire résidente (RSS - Resident
- Size) et Mémoire partagée (Shared Memory).
- </p>
- <p>La différence entre ces deux colonnes est la
- quantité de mémoire par processus. Le segment de mémoire
- partagée n'existe effectivement qu'une seule fois, et
- est utilisé par le code et les bibliothèques chargées et
- la concurrence inter-processus (ou tableau de résultat -
- scoreboard) géré par Apache. La quantité de mémoire
- utilisée par chaque processus dépend fortement du nombre
- et du type de modules utilisés. La meilleure façon d'en
- déterminer les besoins consiste à générer une charge
- type pour votre site web et à observer l'importance que
- prennent les processus httpd.
+ effet, la plupart des impl&eacute;mentations de cette commande
+ pr&eacute;sentent une colonne M&eacute;moire r&eacute;sidente (RSS - Resident
+ Size) et M&eacute;moire partag&eacute;e (Shared Memory).
+ </p>
+ <p>La diff&eacute;rence entre ces deux colonnes est la
+ quantit&eacute; de m&eacute;moire par processus. Le segment de m&eacute;moire
+ partag&eacute;e n'existe effectivement qu'une seule fois, et
+ est utilis&eacute; par le code et les biblioth&egrave;ques charg&eacute;es et
+ la concurrence inter-processus (ou tableau de r&eacute;sultat -
+ scoreboard) g&eacute;r&eacute; par Apache. La quantit&eacute; de m&eacute;moire
+ utilis&eacute;e par chaque processus d&eacute;pend fortement du nombre
+ et du type de modules utilis&eacute;s. La meilleure fa&ccedil;on d'en
+ d&eacute;terminer les besoins consiste &agrave; g&eacute;n&eacute;rer une charge
+ type pour votre site web et &agrave; observer l'importance que
+ prennent les processus httpd.
</p>
<p>La RAM pour les programmes externes comprend
- principalement la mémoire utilisée pour les programmes
- CGI et les scripts qui s'exécutent indépendamment des
+ principalement la m&eacute;moire utilis&eacute;e pour les programmes
+ CGI et les scripts qui s'ex&eacute;cutent ind&eacute;pendamment des
processus httpd. Par contre, si vous utilisez une
- machine virtuelle Java qui exécute Tomcat sur le même
- serveur, cette dernière va aussi nécessiter une quantité
- de mémoire significative. En conséquence, la formule
- ci-dessus qui sert à calculer la valeur maximale de
- <code>MaxClients</code> permet d'effectuer une première approche,
+ machine virtuelle Java qui ex&eacute;cute Tomcat sur le m&ecirc;me
+ serveur, cette derni&egrave;re va aussi n&eacute;cessiter une quantit&eacute;
+ de m&eacute;moire significative. En cons&eacute;quence, la formule
+ ci-dessus qui sert &agrave; calculer la valeur maximale de
+ <code>MaxClients</code> permet d'effectuer une premi&egrave;re approche,
mais ne constitue en aucun cas une science exacte. En
cas de doute, soyez pragmatique et utilisez une valeur assez
basse pour <code>MaxClients</code>. Le noyau Linux
- réserve une certaine quantité de mémoire pour la mise en
- cache des accès disque. Sous Solaris par contre, il faut disposer
- de suffisamment de mémoire RAM pour créer un processus,
- et si ce n'est pas le cas, httpd va démarrer avec un
+ r&eacute;serve une certaine quantit&eacute; de m&eacute;moire pour la mise en
+ cache des acc&egrave;s disque. Sous Solaris par contre, il faut disposer
+ de suffisamment de m&eacute;moire RAM pour cr&eacute;er un processus,
+ et si ce n'est pas le cas, httpd va d&eacute;marrer avec un
message d'erreur du style "No space left on device" dans
- le journal des erreurs, et sera incapable de créer
+ le journal des erreurs, et sera incapable de cr&eacute;er
d'autres processus httpd enfants ; une valeur trop
- élevée pour <code>MaxClients</code> constituera alors
- réellement un désavantage.
+ &eacute;lev&eacute;e pour <code>MaxClients</code> constituera alors
+ r&eacute;ellement un d&eacute;savantage.
</p>
-
+
</section>
<section id="selecting-your-mpm">
<title>Choisir votre MPM
</title>
<p>La commutation entre threads est plus
- aisée pour le système, et ceux-ci consomment moins de
+ ais&eacute;e pour le syst&egrave;me, et ceux-ci consomment moins de
ressources que les processus ; c'est la raison
- principale pour laquelle il est recommandé de choisir un
- MPM threadé. Et
- ceci est encore plus flagrant pour certains systèmes
+ principale pour laquelle il est recommand&eacute; de choisir un
+ MPM thread&eacute;. Et
+ ceci est encore plus flagrant pour certains syst&egrave;mes
d'exploitation que pour d'autres. Par exemple, sous
Solaris ou AIX, la manipulation des processus est assez
- lourde en termes de ressources système ; l'utilisation
- d'un MPM threadé est donc tout à fait indiquée pour ces
- systèmes. Sous Linux en revanche, l'implémentation des
+ lourde en termes de ressources syst&egrave;me ; l'utilisation
+ d'un MPM thread&eacute; est donc tout &agrave; fait indiqu&eacute;e pour ces
+ syst&egrave;mes. Sous Linux en revanche, l'impl&eacute;mentation des
threads utilise en fait un processus par thread. Les
- processus Linux sont assez légers, mais cela signifie qu'un
- MPM threadé présentera ici un gain en performance
- moindre que sous d'autres systèmes.
+ processus Linux sont assez l&eacute;gers, mais cela signifie qu'un
+ MPM thread&eacute; pr&eacute;sentera ici un gain en performance
+ moindre que sous d'autres syst&egrave;mes.
</p>
<p>Dans certaines situations cependant, l'utilisation
- d'un MPM threadé peut induire des problèmes de
- stabilité. Par exemple, si un processus enfant du MPM
+ d'un MPM thread&eacute; peut induire des probl&egrave;mes de
+ stabilit&eacute;. Par exemple, si un processus enfant du MPM
prefork se crashe, au plus une connexion client sera
- affectée ; par contre, si un processus enfant threadé se
+ affect&eacute;e ; par contre, si un processus enfant thread&eacute; se
crashe, ce sont tous les threads de ce processus qui
- vont se crasher à leur tour, ce qui signifie que tous
- les clients qui étaient servis par ce processus verront
- leur connexion interrompue. De plus, certains problèmes
- de sécurité des threads (&quot;thread-safety&quot;)
- peuvent apparaître, particulièrement avec les
- bibliothèques tierces. Avec les applications threadées,
- les différents threads peuvent avoir accès aux mêmes
+ vont se crasher &agrave; leur tour, ce qui signifie que tous
+ les clients qui &eacute;taient servis par ce processus verront
+ leur connexion interrompue. De plus, certains probl&egrave;mes
+ de s&eacute;curit&eacute; des threads (&quot;thread-safety&quot;)
+ peuvent appara&icirc;tre, particuli&egrave;rement avec les
+ biblioth&egrave;ques tierces. Avec les applications thread&eacute;es,
+ les diff&eacute;rents threads peuvent avoir acc&egrave;s aux m&ecirc;mes
variables sans distinction, sans savoir si une variable
- n'a pas été modifiée par un autre thread.
+ n'a pas &eacute;t&eacute; modifi&eacute;e par un autre thread.
</p>
- <p>Ce problème a fait l'objet d'un point sensible au
- sein de la communauté PHP car Le processeur PHP repose
- fortement sur des bibliothèques tierces, et il n'est pas
- garanti que la totalité d'entre elles soient
+ <p>Ce probl&egrave;me a fait l'objet d'un point sensible au
+ sein de la communaut&eacute; PHP car Le processeur PHP repose
+ fortement sur des biblioth&egrave;ques tierces, et il n'est pas
+ garanti que la totalit&eacute; d'entre elles soient
"thread-safe". Bonne nouvelle cependant : si vous
- exécutez Apache sous Linux, vous pouvez utiliser PHP
+ ex&eacute;cutez Apache sous Linux, vous pouvez utiliser PHP
avec le MPM prefork sans craindre une diminution de
- performance trop importante par rapport à une option
- threadée.
+ performance trop importante par rapport &agrave; une option
+ thread&eacute;e.
</p>
-
-
+
+
</section>
<section id="spinning-locks">
<title>Verrous tournants</title>
<p>Apache httpd maintient un verrou inter-processus du
- point de vue de son écoute du réseau. Dans les faits,
- cela signifie qu'un seul processus httpd enfant à la
- fois peut recevoir une requête. Ainsi, soient les autres
- processus en profitent alors pour traiter les requêtes
- qu'ils ont déjà reçues, soient ils attendent de pouvoir
- à leur tour récupérer le verrou et ainsi écouter le
- réseau pour recevoir une nouvelle requête. Ceci peut se
+ point de vue de son &eacute;coute du r&eacute;seau. Dans les faits,
+ cela signifie qu'un seul processus httpd enfant &agrave; la
+ fois peut recevoir une requ&ecirc;te. Ainsi, soient les autres
+ processus en profitent alors pour traiter les requ&ecirc;tes
+ qu'ils ont d&eacute;j&agrave; re&ccedil;ues, soient ils attendent de pouvoir
+ &agrave; leur tour r&eacute;cup&eacute;rer le verrou et ainsi &eacute;couter le
+ r&eacute;seau pour recevoir une nouvelle requ&ecirc;te. Ceci peut se
voir comme une porte tournante par laquelle un seul
- processus peut passer à la fois. Sur un serveur web
- fortement chargé où les requêtes arrivent constamment,
- la porte tourne rapidement et les requêtes sont
- acceptées à un rythme soutenu. Sur un serveur faiblement
- chargé en revanche, le processus qui &quot;détient&quot;
+ processus peut passer &agrave; la fois. Sur un serveur web
+ fortement charg&eacute; o&ugrave; les requ&ecirc;tes arrivent constamment,
+ la porte tourne rapidement et les requ&ecirc;tes sont
+ accept&eacute;es &agrave; un rythme soutenu. Sur un serveur faiblement
+ charg&eacute; en revanche, le processus qui &quot;d&eacute;tient&quot;
le verrou est suceptible de garder sa porte ouverte un
certain temps durant lequel tous les autres processus
seront inactifs, attendant de pouvoir s'approprier le
verrou. Dans une telle situation, le processus parent
- pourra décider d'arrêter quelques processus enfants en
+ pourra d&eacute;cider d'arr&ecirc;ter quelques processus enfants en
fonction de la valeur de la directive
<code>MaxSpareServers</code>.</p>
-
+
</section>
<section id="the-thundering-herd">
<title>L'assaut de la foule
</title>
- <p>La fonction de l'"accept mutex" (c'est le nom donné au
- verrou inter-processus) consiste à gérer la réception
- des requêtes de manière ordonnée. Si ce verrou est
+ <p>La fonction de l'"accept mutex" (c'est le nom donn&eacute; au
+ verrou inter-processus) consiste &agrave; g&eacute;rer la r&eacute;ception
+ des requ&ecirc;tes de mani&egrave;re ordonn&eacute;e. Si ce verrou est
absent, le syndrome de l'"assaut de la foule" peut
- apparaître.
+ appara&icirc;tre.
</p>
- <p>Imaginez une équipe de football américain en attente
+ <p>Imaginez une &eacute;quipe de football am&eacute;ricain en attente
devant la ligne de remise en jeu. Si les joueurs se
comportaient comme des processus Apache, ils se
- précipiteraient tous à la fois pour récupérer la balle au
+ pr&eacute;cipiteraient tous &agrave; la fois pour r&eacute;cup&eacute;rer la balle au
signal de la reprise. Un seul d'entre eux y
- parviendrait, et tous les autres n'auraient plus qu'à se
- regrouper à nouveau sur la ligne jusqu'à la reprise
- suivante. Dans cette métaphore, c'est le quaterback qui
- va jouer le rôle d'"accept mutex" en donnant la balle
- au joueur approprié.
- </p>
- <p>La transmission d'une telle quantité d'informations
- représente naturellement beaucoup de travail et, comme
+ parviendrait, et tous les autres n'auraient plus qu'&agrave; se
+ regrouper &agrave; nouveau sur la ligne jusqu'&agrave; la reprise
+ suivante. Dans cette m&eacute;taphore, c'est le quaterback qui
+ va jouer le r&ocirc;le d'"accept mutex" en donnant la balle
+ au joueur appropri&eacute;.
+ </p>
+ <p>La transmission d'une telle quantit&eacute; d'informations
+ repr&eacute;sente naturellement beaucoup de travail et, comme
une personne intelligente, un serveur intelligent
- tentera d'éviter cette surcharge dans la mesure du
- possible, d'où l'idée de la porte tournante. Dans les
- dernières années, de nombreux systèmes d'exploitation,
- comme Linux et Solaris, ont développé du code pour
- éviter le syndrome de l'"assaut de la foule". Apache
- reconnaît ce code, et si vous n'effectuez qu'une seule
- écoute du réseau, autrement dit si vous n'utilisez que
+ tentera d'&eacute;viter cette surcharge dans la mesure du
+ possible, d'o&ugrave; l'id&eacute;e de la porte tournante. Dans les
+ derni&egrave;res ann&eacute;es, de nombreux syst&egrave;mes d'exploitation,
+ comme Linux et Solaris, ont d&eacute;velopp&eacute; du code pour
+ &eacute;viter le syndrome de l'"assaut de la foule". Apache
+ reconna&icirc;t ce code, et si vous n'effectuez qu'une seule
+ &eacute;coute du r&eacute;seau, autrement dit si vous n'utilisez que
le serveur principal ou un seul serveur virtuel, Apache
n'utilisera pas d'"accept mutex" ; par contre, si vous
- effectuez plusieurs écoutes du réseau (par exemple si
- un serveur virtuel sert les requêtes SSL), Apache
- utilisera un "accept mutex" afin d'éviter les conflits
- internes.
+ effectuez plusieurs &eacute;coutes du r&eacute;seau (par exemple si
+ un serveur virtuel sert les requ&ecirc;tes SSL), Apache
+ utilisera un "accept mutex" afin d'&eacute;viter les conflits
+ internes.
</p>
<p>Vous pouvez manipuler l'"accept mutex" via la
- directive <code>AcceptMutex</code>. Cette dernière
+ directive <code>AcceptMutex</code>. Cette derni&egrave;re
permet en particulier de fermer l'"accept mutex", mais
- aussi de sélectionner le mécanisme de verrouillage. Les
- mécanismes de verrouillage courants comprennent fcntl,
- les sémaphores System V et le verrouillage par threads.
- Tous ne sont pas supportés par toutes les plateformes,
- et leur disponibilité dépend aussi des options de
- compilation. Les différents mécanismes de verrouillage
- peuvent avoir des exigences particulières en matière de
- ressources système ; il est donc recommandé de les
- utiliser avec précautions.
- </p>
- <p>Il n'existe aucune raison particulière pour
- désactiver l'"accept mutex". Apache détermine
+ aussi de s&eacute;lectionner le m&eacute;canisme de verrouillage. Les
+ m&eacute;canismes de verrouillage courants comprennent fcntl,
+ les s&eacute;maphores System V et le verrouillage par threads.
+ Tous ne sont pas support&eacute;s par toutes les plateformes,
+ et leur disponibilit&eacute; d&eacute;pend aussi des options de
+ compilation. Les diff&eacute;rents m&eacute;canismes de verrouillage
+ peuvent avoir des exigences particuli&egrave;res en mati&egrave;re de
+ ressources syst&egrave;me ; il est donc recommand&eacute; de les
+ utiliser avec pr&eacute;cautions.
+ </p>
+ <p>Il n'existe aucune raison particuli&egrave;re pour
+ d&eacute;sactiver l'"accept mutex". Apache d&eacute;termine
automatiquement s'il doit utiliser ou non mutex sur
- votre plateforme en fonction du nombre d'écoutes réseau
- de votre serveur, comme décrit précédemment.
+ votre plateforme en fonction du nombre d'&eacute;coutes r&eacute;seau
+ de votre serveur, comme d&eacute;crit pr&eacute;c&eacute;demment.
</p>
-
+
</section>
</section>
<section id="tuning-the-operating-system">
- <title>Optimisation du système d'exploitation
+ <title>Optimisation du syst&egrave;me d'exploitation
</title>
- <p>Souvent, les utilisateurs recherchent le paramètre magique qui va
- multiplier par quatre les performances de leur système. En
- fait, les systèmes de type Unix actuels sont déjà optimisés
- à l'origine, et il n'y a plus grand chose à faire pour
- améliorer leurs performances. L'administrateur peut
+ <p>Souvent, les utilisateurs recherchent le param&egrave;tre magique qui va
+ multiplier par quatre les performances de leur syst&egrave;me. En
+ fait, les syst&egrave;mes de type Unix actuels sont d&eacute;j&agrave; optimis&eacute;s
+ &agrave; l'origine, et il n'y a plus grand chose &agrave; faire pour
+ am&eacute;liorer leurs performances. L'administrateur peut
cependant encore effectuer quelques modifications qui
- permettront de peaufiner la configuration.
+ permettront de peaufiner la configuration.
</p>
-
-
+
+
<section id="ram-and-swap-space">
<title>RAM et swap
</title>
- <p>Le leitmotiv en matière de mémoire est souvent "plus
+ <p>Le leitmotiv en mati&egrave;re de m&eacute;moire est souvent "plus
on en a, mieux c'est". En effet, comme nous avons dit
- plus haut, la mémoire inutilisée peut être
- avantageusement utilisée comme cache du système de
+ plus haut, la m&eacute;moire inutilis&eacute;e peut &ecirc;tre
+ avantageusement utilis&eacute;e comme cache du syst&egrave;me de
fichiers. Plus vous chargez de modules, plus les processus
Apache grossissent, et ceci d'autant plus si vous
- utilisez des modules qui génèrent des contenus
+ utilisez des modules qui g&eacute;n&egrave;rent des contenus
dynamiques comme PHP et mod_perl. Un gros fichier de
configuration - avec de nombreux serveurs virtuels - a
- aussi tendance à augmenter l'empreinte mémoire des
- processus. Une quantité de mémoire importante vous
- permettra d'exécuter Apache avec plus de processus
- enfants, et donc de traiter d'avantage de requêtes
- simultanément.
- </p>
- <p>Même si les différentes plateformes traitent leur
- mémoire virtuelle de différentes manières, il est
- déconseillé de configurer un espace disque de swap
- inférieur à la mémoire RAM. En effet, le système de mémoire
- virtuelle a été conçu de manière à prendre le relai
- lorsque la mémoire RAM fait défaut, et lorsque l'espace
- disque, et donc l'espace de swap vient à manquer, votre
- serveur risque de s'arrêter. Vous devrez alors
- redémarrer physiquement votre serveur, et votre
- hébergeur pourra vous facturer le service.
- </p>
- <p>Evidemment, ce genre problème survient au moment le
- plus défavorable : lorsque le monde vient découvrir votre
- site web et se présente avec insistance à votre porte.
- Si votre espace de swap est suffisant, même si la
- machine sera de plus en plus surchargée et deviendra
- très très lente car le système devra swapper les pages
- entre la mémoire et le disque, lorsque la charge diminuera à
- nouveau, le système reviendra dans son mode de
+ aussi tendance &agrave; augmenter l'empreinte m&eacute;moire des
+ processus. Une quantit&eacute; de m&eacute;moire importante vous
+ permettra d'ex&eacute;cuter Apache avec plus de processus
+ enfants, et donc de traiter d'avantage de requ&ecirc;tes
+ simultan&eacute;ment.
+ </p>
+ <p>M&ecirc;me si les diff&eacute;rentes plateformes traitent leur
+ m&eacute;moire virtuelle de diff&eacute;rentes mani&egrave;res, il est
+ d&eacute;conseill&eacute; de configurer un espace disque de swap
+ inf&eacute;rieur &agrave; la m&eacute;moire RAM. En effet, le syst&egrave;me de m&eacute;moire
+ virtuelle a &eacute;t&eacute; con&ccedil;u de mani&egrave;re &agrave; prendre le relai
+ lorsque la m&eacute;moire RAM fait d&eacute;faut, et lorsque l'espace
+ disque, et donc l'espace de swap vient &agrave; manquer, votre
+ serveur risque de s'arr&ecirc;ter. Vous devrez alors
+ red&eacute;marrer physiquement votre serveur, et votre
+ h&eacute;bergeur pourra vous facturer le service.
+ </p>
+ <p>Evidemment, ce genre probl&egrave;me survient au moment le
+ plus d&eacute;favorable : lorsque le monde vient d&eacute;couvrir votre
+ site web et se pr&eacute;sente avec insistance &agrave; votre porte.
+ Si votre espace de swap est suffisant, m&ecirc;me si la
+ machine sera de plus en plus surcharg&eacute;e et deviendra
+ tr&egrave;s tr&egrave;s lente car le syst&egrave;me devra swapper les pages
+ entre la m&eacute;moire et le disque, lorsque la charge diminuera &agrave;
+ nouveau, le syst&egrave;me reviendra dans son mode de
fonctionnement normal. Rappelez-vous que vous disposez
- de la directive <code>MaxClients</code> pour garder le contrôle.
+ de la directive <code>MaxClients</code> pour garder le contr&ocirc;le.
</p>
- <p>La plupart des systèmes de type Unix utilisent des
- partitions dédiées au swap. Au démarrage du système,
+ <p>La plupart des syst&egrave;mes de type Unix utilisent des
+ partitions d&eacute;di&eacute;es au swap. Au d&eacute;marrage du syst&egrave;me,
celui-ci enregistre toutes les partitions de swap du ou
des disques en fonction du type de la partition ou du
contenu du fichier <code>/etc/fstab</code> et les
- active de manière automatique. Lorsque vous ajoutez un
- disque, ou lorsque vous installez le système
+ active de mani&egrave;re automatique. Lorsque vous ajoutez un
+ disque, ou lorsque vous installez le syst&egrave;me
d'exploitation, assurez-vous d'allouer suffisamment
- d'espace de swap afin de rester en adéquation avec une
- éventuelle augmentation de la mémoire RAM. La
- réallocation d'espace disque sur un système en
- production est en effet pénible et fastidieuse.
- </p>
- <p>Prévoyez un espace de swap de deux fois la taille de
- votre mémoire RAM, et même jusqu'à quatre fois lorsque
- les surcharges peuvent s'avérer fréquentes. Assurez-vous
- de réajuster ces valeurs lorsque vous augmentez la
- quantité de mémoire RAM de votre système. En secours,
+ d'espace de swap afin de rester en ad&eacute;quation avec une
+ &eacute;ventuelle augmentation de la m&eacute;moire RAM. La
+ r&eacute;allocation d'espace disque sur un syst&egrave;me en
+ production est en effet p&eacute;nible et fastidieuse.
+ </p>
+ <p>Pr&eacute;voyez un espace de swap de deux fois la taille de
+ votre m&eacute;moire RAM, et m&ecirc;me jusqu'&agrave; quatre fois lorsque
+ les surcharges peuvent s'av&eacute;rer fr&eacute;quentes. Assurez-vous
+ de r&eacute;ajuster ces valeurs lorsque vous augmentez la
+ quantit&eacute; de m&eacute;moire RAM de votre syst&egrave;me. En secours,
vous pouvez aussi utilisez un fichier comme espace de
swap. Pour ce faire, vous trouverez les instructions
dans les pages de manuel de <code>mkswap</code> et
<code>swapon</code>, ou dans celles des programmes de
- <code>swap</code>.
+ <code>swap</code>.
</p>
-
-
+
+
</section>
<section id="ulimit-files-and-processes">
<title>ulimit: fichiers et processus
</title>
- <p>Supposons que vous disposiez d'une machine possédant
- une énorme quantité de mémoire RAM et un processeur aux
- performances astronomiques ; vous pourrez alors exécuter
+ <p>Supposons que vous disposiez d'une machine poss&eacute;dant
+ une &eacute;norme quantit&eacute; de m&eacute;moire RAM et un processeur aux
+ performances astronomiques ; vous pourrez alors ex&eacute;cuter
des centaines de processus Apache selon vos besoins,
- mais tout en restant en deçà des limites imposées par le
- noyau de votre système.
+ mais tout en restant en de&ccedil;&agrave; des limites impos&eacute;es par le
+ noyau de votre syst&egrave;me.
</p>
- <p>Considérez maintenant une situation où plusieurs
- centaines de serveurs web sont en cours d'exécution ; si
- certains d'entre eux doivent à leur tour lancer des
- processus CGI, le nombre maximum de processus autorisé
+ <p>Consid&eacute;rez maintenant une situation o&ugrave; plusieurs
+ centaines de serveurs web sont en cours d'ex&eacute;cution ; si
+ certains d'entre eux doivent &agrave; leur tour lancer des
+ processus CGI, le nombre maximum de processus autoris&eacute;
par le noyau sera vite atteint.
</p>
<p>Dans ce cas, vous pouvez modifier cette limite avec
- la commande :
+ la commande :
</p>
-
+
<example>
ulimit [-H|-S] -u [nouvelle valeur]
</example>
-
- <p>Cette modification doit être effectuée avant le
- démarrage du serveur, car la nouvelle valeur ne sera
+
+ <p>Cette modification doit &ecirc;tre effectu&eacute;e avant le
+ d&eacute;marrage du serveur, car la nouvelle valeur ne sera
prise en compte que dans le shell courant et pour les
- programmes lancés depuis ce dernier. Dans les derniers
- noyaux Linux, la valeur par défaut a été fixée à 2048.
- Sous FreeBSD, ce nombre semble être limité à la valeur
- inhabituelle de 513. Dans le shell par défaut de ce
- système, <code>csh</code>, la commande équivalente est
- <code>limit</code> et possède une syntaxe analogue à
+ programmes lanc&eacute;s depuis ce dernier. Dans les derniers
+ noyaux Linux, la valeur par d&eacute;faut a &eacute;t&eacute; fix&eacute;e &agrave; 2048.
+ Sous FreeBSD, ce nombre semble &ecirc;tre limit&eacute; &agrave; la valeur
+ inhabituelle de 513. Dans le shell par d&eacute;faut de ce
+ syst&egrave;me, <code>csh</code>, la commande &eacute;quivalente est
+ <code>limit</code> et poss&egrave;de une syntaxe analogue &agrave;
celle de la commande de style Bourne <code>ulimit</code> :
</p>
-
+
<example>
limit [-h] maxproc [newvalue]
</example>
-
+
<p>En outre, le noyau peut limiter le nombre de fichiers
- ouverts par processus. Ce n'est généralement pas un
- problème pour les serveurs dont les processus sont lancés
- à l'avance, et où chacun de ceux-ci ne traite qu'une
- requête à la fois. Les processus des serveurs threadés,
- quant à eux, traitent plusieurs requêtes simultanément,
- et sont d'avantage susceptibles de dépasser la limite du
+ ouverts par processus. Ce n'est g&eacute;n&eacute;ralement pas un
+ probl&egrave;me pour les serveurs dont les processus sont lanc&eacute;s
+ &agrave; l'avance, et o&ugrave; chacun de ceux-ci ne traite qu'une
+ requ&ecirc;te &agrave; la fois. Les processus des serveurs thread&eacute;s,
+ quant &agrave; eux, traitent plusieurs requ&ecirc;tes simultan&eacute;ment,
+ et sont d'avantage susceptibles de d&eacute;passer la limite du
nombre de descripteurs de fichiers. Vous pouvez alors
augmenter cette valeur limite du nombre de fichiers
- ouverts avec la commande :
+ ouverts avec la commande :
</p>
-
+
<example>ulimit -n [newvalue]
</example>
-
- <p>Là encore, cette modification doit être effectuée
- avant le démarrage du serveur Apache.
+
+ <p>L&agrave; encore, cette modification doit &ecirc;tre effectu&eacute;e
+ avant le d&eacute;marrage du serveur Apache.
</p>
-
-
+
+
</section>
<section id="setting-user-limits-on-system-startup">
- <title>Définition des limites en fonction de l'utilisateur ou du
- groupe au démarrage du système
+ <title>D&eacute;finition des limites en fonction de l'utilisateur ou du
+ groupe au d&eacute;marrage du syst&egrave;me
</title>
- <p>Sous Linux, vous pouvez définir les paramètres de
- ulimit au démarrage en éditant le fichier
+ <p>Sous Linux, vous pouvez d&eacute;finir les param&egrave;tres de
+ ulimit au d&eacute;marrage en &eacute;ditant le fichier
<code>/etc/security/limits.conf</code>. Ce fichier vous
- permet de définir des limites "soft" et "hard"
+ permet de d&eacute;finir des limites "soft" et "hard"
en fonction de l'utilisateur ou du groupe ;
vous y trouverez aussi des commentaires explicatifs des
- différentes options. Pour que ce fichier soit pris en
+ diff&eacute;rentes options. Pour que ce fichier soit pris en
compte, le fichier <code>/etc/pam.d/login</code> doit
- contenir la ligne :
+ contenir la ligne :
</p>
-
+
<example>session required /lib/security/pam_limits.so
</example>
-
- <p>Chaque item peut posséder une valeur "soft" et
- "hard" : la première est la valeur
- par défaut, et la seconde la valeur maximale de cet
- item.
+
+ <p>Chaque item peut poss&eacute;der une valeur "soft" et
+ "hard" : la premi&egrave;re est la valeur
+ par d&eacute;faut, et la seconde la valeur maximale de cet
+ item.
</p>
<p>Dans le fichier <code>/etc/login.conf</code> de
- FreeBSD, ces valeurs peuvent être limitées ou étendues à
- tout le système de manière analogue au fichier
+ FreeBSD, ces valeurs peuvent &ecirc;tre limit&eacute;es ou &eacute;tendues &agrave;
+ tout le syst&egrave;me de mani&egrave;re analogue au fichier
<code>limits.conf</code>. Les limites "soft" sont
- spécifiées via le paramètre <code>-cur</code>, et les
- limites "hard" via le paramètre <code>-max</code>.
- </p>
- <p>Solaris possède un mécanisme similaire pour manipuler
- les valeurs limites au démarrage du système : dans le
- fichier <code>/etc/system</code>, vous pouvez définir au
- démarrage des paramètres du noyau valables pour
- l'ensemble du système. Ce sont les mêmes paramètres que
- ceux définis à l'exécution par le débogueur de noyau
- <code>mdb</code>. Les commandes équivalentes à ulimit -u
- pour définir les limites hard et soft seront du style :
- </p>
-
+ sp&eacute;cifi&eacute;es via le param&egrave;tre <code>-cur</code>, et les
+ limites "hard" via le param&egrave;tre <code>-max</code>.
+ </p>
+ <p>Solaris poss&egrave;de un m&eacute;canisme similaire pour manipuler
+ les valeurs limites au d&eacute;marrage du syst&egrave;me : dans le
+ fichier <code>/etc/system</code>, vous pouvez d&eacute;finir au
+ d&eacute;marrage des param&egrave;tres du noyau valables pour
+ l'ensemble du syst&egrave;me. Ce sont les m&ecirc;mes param&egrave;tres que
+ ceux d&eacute;finis &agrave; l'ex&eacute;cution par le d&eacute;bogueur de noyau
+ <code>mdb</code>. Les commandes &eacute;quivalentes &agrave; ulimit -u
+ pour d&eacute;finir les limites hard et soft seront du style :
+ </p>
+
<example>
set rlim_fd_max=65536<br />
set rlim_fd_cur=2048
</example>
-
+
<p>Solaris calcule le nombre maximal de processus
- autorisé par utilisateur (<code>maxuprc</code>) en
- fonction de la mémoire système disponible
+ autoris&eacute; par utilisateur (<code>maxuprc</code>) en
+ fonction de la m&eacute;moire syst&egrave;me disponible
(<code>maxusers</code>). Vous pouvez obtenir ces valeurs
- avec la commande :
+ avec la commande :
</p>
-
+
<example>sysdef -i | grep maximum
</example>
-
- <p>Il est cependant déconseillé de les modifier.
+
+ <p>Il est cependant d&eacute;conseill&eacute; de les modifier.
</p>
-
-
+
+
</section>
<section id="turn-off-unused-services-and-modules">
- <title>Désactiver les services et modules non utilisés
+ <title>D&eacute;sactiver les services et modules non utilis&eacute;s
</title>
<p>Dans la plupart des distributions Unix et Linux, de
- nombreux services sont activés par défaut, et vous n'
- avez probablement besoin que d'une minorité d'entre eux.
+ nombreux services sont activ&eacute;s par d&eacute;faut, et vous n'
+ avez probablement besoin que d'une minorit&eacute; d'entre eux.
Par exemple, votre serveur web n'a pas besoin de
- sendmail, de fournir le service NFS, etc... Désactivez
- les tout simplement.
+ sendmail, de fournir le service NFS, etc... D&eacute;sactivez
+ les tout simplement.
</p>
<p>Pour ce faire, sous RedHat Linux, vous
disposez de l'utilitaire chkconfig en ligne de commande.
Sous Solaris, les commandes <code>svcs</code> et
<code>svcadm</code> vous permettent respectivement
- de lister les services activés et de désactiver ceux
- dont vous n'avez pas besoin.
+ de lister les services activ&eacute;s et de d&eacute;sactiver ceux
+ dont vous n'avez pas besoin.
</p>
- <p>Vous devez aussi prêter attention aux modules Apache
- chargés par défaut. La plupart des distributions binaires
- d'Apache httpd et des versions préinstallées fournies
+ <p>Vous devez aussi pr&ecirc;ter attention aux modules Apache
+ charg&eacute;s par d&eacute;faut. La plupart des distributions binaires
+ d'Apache httpd et des versions pr&eacute;install&eacute;es fournies
avec les distributions de Linux chargent les modules
Apache via la directive
- <directive>LoadModule</directive>.
+ <directive>LoadModule</directive>.
</p>
- <p>Les modules inutilisés peuvent être désactivés : si
- vous n'avez pas besoin de leurs fonctionnalités et des
- directives de configuration qu'ils implémentent,
- désactivez-les en commentant les lignes
+ <p>Les modules inutilis&eacute;s peuvent &ecirc;tre d&eacute;sactiv&eacute;s : si
+ vous n'avez pas besoin de leurs fonctionnalit&eacute;s et des
+ directives de configuration qu'ils impl&eacute;mentent,
+ d&eacute;sactivez-les en commentant les lignes
<directive>LoadModule</directive> correspondantes. Vous
- devez cependant lire la documentation relative à ces
- modules avant de les désactiver, et garder à l'esprit que
- la désactivation d'un module très peu gourmand en
- ressources n'est pas absolument nécessaire.
+ devez cependant lire la documentation relative &agrave; ces
+ modules avant de les d&eacute;sactiver, et garder &agrave; l'esprit que
+ la d&eacute;sactivation d'un module tr&egrave;s peu gourmand en
+ ressources n'est pas absolument n&eacute;cessaire.
</p>
-
-
+
+
</section>
</section>
</section>
<section id="caching-content">
<title>Mise en cache des contenus
</title>
- <p>Les requêtes impliquant des contenus dynamiques nécessitent
- en général d'avantage de ressources que les
- requêtes pour des contenus statiques. Les contenus statiques
+ <p>Les requ&ecirc;tes impliquant des contenus dynamiques n&eacute;cessitent
+ en g&eacute;n&eacute;ral d'avantage de ressources que les
+ requ&ecirc;tes pour des contenus statiques. Les contenus statiques
consistent en simples pages issues de documents ou images
- sur disque, et sont servis très rapidement. En outre, de
- nombreux systèmes d'exploitation mettent automatiquement en
- cache en mémoire les contenus des fichiers fréquemment accédés.
+ sur disque, et sont servis tr&egrave;s rapidement. En outre, de
+ nombreux syst&egrave;mes d'exploitation mettent automatiquement en
+ cache en m&eacute;moire les contenus des fichiers fr&eacute;quemment acc&eacute;d&eacute;s.
</p>
- <p>Comme indiqué précédemment, le traitement des requêtes dynamiques peut
- nécessiter beaucoup plus de ressources. L'exécution de scripts
- CGI, le transfert de requêtes à un serveur d'applications
- externe, ou les accès à une base de données peuvent impliquer
+ <p>Comme indiqu&eacute; pr&eacute;c&eacute;demment, le traitement des requ&ecirc;tes dynamiques peut
+ n&eacute;cessiter beaucoup plus de ressources. L'ex&eacute;cution de scripts
+ CGI, le transfert de requ&ecirc;tes &agrave; un serveur d'applications
+ externe, ou les acc&egrave;s &agrave; une base de donn&eacute;es peuvent impliquer
des temps d'attente et charges de travail significatifs pour un
- serveur web fortement sollicité. Dans de nombreuses
- circonstances, vous pourrez alors améliorer les performances en
- transformant les requêtes dynamiques courantes en requêtes
- statiques. Pour ce faire, deux approches seront discutées dans
- la suite de cette section.
+ serveur web fortement sollicit&eacute;. Dans de nombreuses
+ circonstances, vous pourrez alors am&eacute;liorer les performances en
+ transformant les requ&ecirc;tes dynamiques courantes en requ&ecirc;tes
+ statiques. Pour ce faire, deux approches seront discut&eacute;es dans
+ la suite de cette section.
</p>
-
-
+
+
<section id="making-popular-pages-static">
<title>Transformation des pages courantes en contenus
statiques
</title>
- <p>En générant à l'avance les réponses pour les requêtes les
- plus courantes de votre application, vous pouvez améliorer
- de manière significative les performances de votre serveur
- sans abandonner la flexibilité des contenus générés
+ <p>En g&eacute;n&eacute;rant &agrave; l'avance les r&eacute;ponses pour les requ&ecirc;tes les
+ plus courantes de votre application, vous pouvez am&eacute;liorer
+ de mani&egrave;re significative les performances de votre serveur
+ sans abandonner la flexibilit&eacute; des contenus g&eacute;n&eacute;r&eacute;s
dynamiquement. Par exemple, si votre application est un
- service de livraison de fleurs, vous aurez tout intérêt à
- générer à l'avance les pages de votre catalogue concernant
- les roses rouges dans les semaines précédant le jour de la
+ service de livraison de fleurs, vous aurez tout int&eacute;r&ecirc;t &agrave;
+ g&eacute;n&eacute;rer &agrave; l'avance les pages de votre catalogue concernant
+ les roses rouges dans les semaines pr&eacute;c&eacute;dant le jour de la
Saint Valentin. Lorsqu'un utilisateur cherchera des roses
- rouges, il téléchargera alors les pages générées à
+ rouges, il t&eacute;l&eacute;chargera alors les pages g&eacute;n&eacute;r&eacute;es &agrave;
l'avance. Par contre, les recherches de roses jaunes seront
- quant à elles traitées directement via une requête vers la
- base de données. Pour effectuer ces aiguillages de requêtes,
- vous disposez d'un outil particulièrement approprié fourni
- avec Apache : le module mod_rewrite.
+ quant &agrave; elles trait&eacute;es directement via une requ&ecirc;te vers la
+ base de donn&eacute;es. Pour effectuer ces aiguillages de requ&ecirc;tes,
+ vous disposez d'un outil particuli&egrave;rement appropri&eacute; fourni
+ avec Apache : le module mod_rewrite.
</p>
-
-
+
+
<section id="example-a-statically-rendered-blog">
<title>Exemple : un blog servi statiquement
</title>
<!--we should provide a more useful example here.
One showing how to make Wordpress or Drupal suck less. -->
-
+
<p>Blosxom est un programme CGI de journalisation web
- léger. Il est écrit en Perl et utilise des fichiers
- texte pour ses entrées. Outre sa qualité de programme
- CGI, Blosxom peut être exécuté en ligne de commande pour
- générer à l'avance des pages de blog. Lorsque votre blog
- commence à être lu par un grand nombre de personnes, la
- génération à l'avance de pages en HTML satique peut
- améliorer de manière significative les performances de
- votre serveur.
- </p>
- <p>Pour générer des pages statiques avec blosxom, éditez
- le script CGI selon la documentation. Définissez la
- variable $static dir à la valeur de
+ l&eacute;ger. Il est &eacute;crit en Perl et utilise des fichiers
+ texte pour ses entr&eacute;es. Outre sa qualit&eacute; de programme
+ CGI, Blosxom peut &ecirc;tre ex&eacute;cut&eacute; en ligne de commande pour
+ g&eacute;n&eacute;rer &agrave; l'avance des pages de blog. Lorsque votre blog
+ commence &agrave; &ecirc;tre lu par un grand nombre de personnes, la
+ g&eacute;n&eacute;ration &agrave; l'avance de pages en HTML satique peut
+ am&eacute;liorer de mani&egrave;re significative les performances de
+ votre serveur.
+ </p>
+ <p>Pour g&eacute;n&eacute;rer des pages statiques avec blosxom, &eacute;ditez
+ le script CGI selon la documentation. D&eacute;finissez la
+ variable $static dir &agrave; la valeur de
<directive>DocumentRoot</directive> de votre serveur
- web, et exécutez le script en ligne de commande comme
- suit :
+ web, et ex&eacute;cutez le script en ligne de commande comme
+ suit :
</p>
-
+
<example>$ perl blosxom.cgi -password='whateveryourpassword'
</example>
-
- <p>Vous pouvez exécuter ce script périodiquement via
- cron, à chaque fois que vous ajoutez un nouveau contenu. Pour
+
+ <p>Vous pouvez ex&eacute;cuter ce script p&eacute;riodiquement via
+ cron, &agrave; chaque fois que vous ajoutez un nouveau contenu. Pour
faire en sorte qu'Apache substitue les pages
statiques au contenu dynamique, nous
utiliserons mod_rewrite. Ce module est fourni avec le
- code source d'Apache, mais n'est pas compilé par défaut.
+ code source d'Apache, mais n'est pas compil&eacute; par d&eacute;faut.
Pour le compiler avec la distribution d'Apache, vous
pouvez utiliser l'option de la commande configure
<code>--enable-rewrite[=shared]</code>. De nombreuses
distributions binaires d'Apache sont fournies avec
<module>mod_rewrite</module> inclus. Dans l'exemple
suivant, un serveur virtuel Apache utilise les pages de
- blog générées à l'avance :
+ blog g&eacute;n&eacute;r&eacute;es &agrave; l'avance :
</p>
-
+
<highlight language="config">
Listen *:8001
&lt;VirtualHost *:8001&gt;
@@ -1474,76 +1474,76 @@ Listen *:8001
&lt;/Directory&gt;
&lt;/VirtualHost&gt;
</highlight>
-
+
<p>
Si les directives <directive>RewriteCond</directive>
- indiquent que la ressource demandée n'existe ni en tant que
- fichier, ni en tant que répertoire, son
- chemin sera redirigé par la directive
+ indiquent que la ressource demand&eacute;e n'existe ni en tant que
+ fichier, ni en tant que r&eacute;pertoire, son
+ chemin sera redirig&eacute; par la directive
<directive>RewriteRule</directive> vers le programme
- CGI Blosxom qui va générer la réponse. Blosxom
- utilise Path Info pour spécifier les entrées de blog
+ CGI Blosxom qui va g&eacute;n&eacute;rer la r&eacute;ponse. Blosxom
+ utilise Path Info pour sp&eacute;cifier les entr&eacute;es de blog
en tant que pages d'index, et si un chemin dans
- Blosxom existe en tant que fichier statique dans le système de
- fichiers, c'est ce dernier qui sera par conséquent privilégié.
- Toute requête dont la réponse n'a pas été générée à
- l'avance sera traitée par le programme CGI. Cela
- signifie que les entrées individuelles comme les
+ Blosxom existe en tant que fichier statique dans le syst&egrave;me de
+ fichiers, c'est ce dernier qui sera par cons&eacute;quent privil&eacute;gi&eacute;.
+ Toute requ&ecirc;te dont la r&eacute;ponse n'a pas &eacute;t&eacute; g&eacute;n&eacute;r&eacute;e &agrave;
+ l'avance sera trait&eacute;e par le programme CGI. Cela
+ signifie que les entr&eacute;es individuelles comme les
commentaires seront toujours servies par le
programme CGI, et seront donc toujours visibles.
Cette configuration permet aussi de ne pas faire
- apparaître le programme CGI Blosxom dans l'URL de la barre
- d'adresse. Enfin, mod_rewrite est un module extrêmement
+ appara&icirc;tre le programme CGI Blosxom dans l'URL de la barre
+ d'adresse. Enfin, mod_rewrite est un module extr&ecirc;mement
souple et puissant ; prenez le temps de bien
- l'étudier afin de parvenir à la configuration qui
- correspondra le mieux à votre situation.
+ l'&eacute;tudier afin de parvenir &agrave; la configuration qui
+ correspondra le mieux &agrave; votre situation.
</p>
-
-
+
+
</section>
</section>
<section id="caching-content-with-mod_cache">
<title>Mise en cache du contenu avec mod_cache
</title>
- <p>Le module mod_cache implémente une mise en cache
- intelligente des réponses HTTP : il tient compte des délais
- de péremption et des contraintes en matière de contenu
- inhérentes à la spécification HTTP. Le module mod_cache met
- en cache les URL des contenus des réponses. Si un contenu envoyé au
- client peut être mis en cache, il est sauvegardé sur disque.
- Les requêtes ultérieures pour cette URL seront alors servies
+ <p>Le module mod_cache impl&eacute;mente une mise en cache
+ intelligente des r&eacute;ponses HTTP : il tient compte des d&eacute;lais
+ de p&eacute;remption et des contraintes en mati&egrave;re de contenu
+ inh&eacute;rentes &agrave; la sp&eacute;cification HTTP. Le module mod_cache met
+ en cache les URL des contenus des r&eacute;ponses. Si un contenu envoy&eacute; au
+ client peut &ecirc;tre mis en cache, il est sauvegard&eacute; sur disque.
+ Les requ&ecirc;tes ult&eacute;rieures pour cette URL seront alors servies
directement depuis le cache. Le module fournisseur pour
- mod_cache, mod_disk_cache, détermine la manière dont les
- contenus sont stockés sur disque. La plupart des systèmes de
- serveur possèdent plus d'espace disque que de mémoire, et il
- est bon de garder à l'esprit que certains noyaux système mettent en
- cache de manière transparente en mémoire les contenus sur
- disque fréquemment accédés ; il n'est donc pas très utile de
- répéter cette opération au niveau du serveur.
+ mod_cache, mod_disk_cache, d&eacute;termine la mani&egrave;re dont les
+ contenus sont stock&eacute;s sur disque. La plupart des syst&egrave;mes de
+ serveur poss&egrave;dent plus d'espace disque que de m&eacute;moire, et il
+ est bon de garder &agrave; l'esprit que certains noyaux syst&egrave;me mettent en
+ cache de mani&egrave;re transparente en m&eacute;moire les contenus sur
+ disque fr&eacute;quemment acc&eacute;d&eacute;s ; il n'est donc pas tr&egrave;s utile de
+ r&eacute;p&eacute;ter cette op&eacute;ration au niveau du serveur.
</p>
<p>Pour mettre en oeuvre une mise en cache de contenu
- efficace et éviter de présenter à l'utilisateur un contenu
- invalide ou périmé, l'application qui génère le contenu à
- jour doit envoyer les en-têtes de réponse corrects. En
- effet, en l'absence d'en-têtes comme <code>Etag:</code>,
+ efficace et &eacute;viter de pr&eacute;senter &agrave; l'utilisateur un contenu
+ invalide ou p&eacute;rim&eacute;, l'application qui g&eacute;n&egrave;re le contenu &agrave;
+ jour doit envoyer les en-t&ecirc;tes de r&eacute;ponse corrects. En
+ effet, en l'absence d'en-t&ecirc;tes comme <code>Etag:</code>,
<code>Last-Modified:</code> ou <code>Expires:</code>,
- <module>mod_cache</module> ne sera pas en mesure de décider
- de manière appropriée
+ <module>mod_cache</module> ne sera pas en mesure de d&eacute;cider
+ de mani&egrave;re appropri&eacute;e
s'il doit mettre le contenu en cache, s'il doit le servir
directement depuis ce dernier, ou s'il doit tout simplement
ne rien faire. Lorsque vous testerez la mise en cache, vous
- devrez peut-être modifier votre application ou, en cas
- d'impossibilité, désactiver de manière sélective la mise en
- cache des URLs qui posent problème. Les modules mod_cache ne
- sont pas compilés par défaut ; pour ce faire, vous devez
+ devrez peut-&ecirc;tre modifier votre application ou, en cas
+ d'impossibilit&eacute;, d&eacute;sactiver de mani&egrave;re s&eacute;lective la mise en
+ cache des URLs qui posent probl&egrave;me. Les modules mod_cache ne
+ sont pas compil&eacute;s par d&eacute;faut ; pour ce faire, vous devez
utiliser l'option <code>--enable-cache[=shared]</code> du
script configure. Si vous utilisez une distribution binaire
d'Apache httpd, ou si elle fait partie de votre portage ou
- de votre sélection de paquets, <module>mod_cache</module>
- sera probablement déjà inclus.
+ de votre s&eacute;lection de paquets, <module>mod_cache</module>
+ sera probablement d&eacute;j&agrave; inclus.
</p>
-
-
+
+
<section id="example-wiki">
<title>Exemple : wiki.apache.org
</title>
@@ -1551,94 +1551,94 @@ Listen *:8001
a better example here too.-->
<p>
Le Wiki de l'Apache Software Foundation est servi
- par MoinMoin. MoinMoin est écrit en Python et
- s'exécute en tant que programme CGI. A l'heure
- actuelle, toute tentative pour l'exécuter via
- mod_python s'est soldée par un échec. Le programme
+ par MoinMoin. MoinMoin est &eacute;crit en Python et
+ s'ex&eacute;cute en tant que programme CGI. A l'heure
+ actuelle, toute tentative pour l'ex&eacute;cuter via
+ mod_python s'est sold&eacute;e par un &eacute;chec. Le programme
CGI induit une charge inacceptable sur le serveur,
- particulièrement lorsque le Wiki est indexé par des
- moteurs de recherche comme Google. Pour alléger la
- charge de la machine, l'équipe d'infrastructure
- d'Apache s'est tournée vers mod_cache. Il s'est
- avéré que <a href="/httpd/MoinMoin">MoinMoin</a>
- nécessitait un petit patch pour adopter un
- comportement approprié en aval du serveur de mise
- en cache : certaines requêtes ne pouvaient jamais
- être mises en cache, et les modules Python
- concernés ont été mis à jour pour pouvoir envoyer
- les en-têtes de réponse HTTP corrects. Après cette
+ particuli&egrave;rement lorsque le Wiki est index&eacute; par des
+ moteurs de recherche comme Google. Pour all&eacute;ger la
+ charge de la machine, l'&eacute;quipe d'infrastructure
+ d'Apache s'est tourn&eacute;e vers mod_cache. Il s'est
+ av&eacute;r&eacute; que <a href="/httpd/MoinMoin">MoinMoin</a>
+ n&eacute;cessitait un petit patch pour adopter un
+ comportement appropri&eacute; en aval du serveur de mise
+ en cache : certaines requ&ecirc;tes ne pouvaient jamais
+ &ecirc;tre mises en cache, et les modules Python
+ concern&eacute;s ont &eacute;t&eacute; mis &agrave; jour pour pouvoir envoyer
+ les en-t&ecirc;tes de r&eacute;ponse HTTP corrects. Apr&egrave;s cette
modification, la mise en cache en amont du Wiki a
- été activée via l'insertion des lignes suivantes
+ &eacute;t&eacute; activ&eacute;e via l'insertion des lignes suivantes
dans le fichier de configuration
<code>httpd.conf</code> :
</p>
-
+
<highlight language="config">
CacheRoot /raid1/cacheroot
CacheEnable disk /
-# Une page modifiée il y a 100 minutes expirera dans 10 minutes
+# Une page modifi&eacute;e il y a 100 minutes expirera dans 10 minutes
CacheLastModifiedFactor .1
-# Dans tous les cas, vérifier la validité des pages après 6 heures
+# Dans tous les cas, v&eacute;rifier la validit&eacute; des pages apr&egrave;s 6 heures
CacheMaxExpire 21600
</highlight>
-
+
<p>Cette configuration essaie de mettre en cache tout
contenu de son serveur virtuel. Elle ne mettra jamais en
cache un contenu plus vieux que 6 heures (voir la
directive <directive
module="mod_cache">CacheMaxExpire</directive>). Si
- l'en-tête <code>Expires:</code> est absent de la
- réponse, <module>mod_cache</module> va calculer une date
- d'expiration en fonction du contenu de l'en-tête
+ l'en-t&ecirc;te <code>Expires:</code> est absent de la
+ r&eacute;ponse, <module>mod_cache</module> va calculer une date
+ d'expiration en fonction du contenu de l'en-t&ecirc;te
<code>Last-Modified:</code>. Le principe de ce calcul
qui utilise la directive <directive
module="mod_cache">CacheLastModifiedFactor</directive>
- se base sur l'hypothèse que si une page a été modifiée
- récemment, il y a de fortes chances pour qu'elle le soit
- à nouveau dans un futur proche et devra donc être remise
- en cache.
+ se base sur l'hypoth&egrave;se que si une page a &eacute;t&eacute; modifi&eacute;e
+ r&eacute;cemment, il y a de fortes chances pour qu'elle le soit
+ &agrave; nouveau dans un futur proche et devra donc &ecirc;tre remise
+ en cache.
</p>
<p>
- Notez qu'il peut s'avérer payant de
- <em>désactiver</em> l'en-tête <code>ETag:</code> :
- pour les fichiers inférieurs à 1 ko, le serveur
- doit calculer la somme de vérification checksum (en
- général MD5) et envoyer une réponse <code>304 Not
+ Notez qu'il peut s'av&eacute;rer payant de
+ <em>d&eacute;sactiver</em> l'en-t&ecirc;te <code>ETag:</code> :
+ pour les fichiers inf&eacute;rieurs &agrave; 1 ko, le serveur
+ doit calculer la somme de v&eacute;rification checksum (en
+ g&eacute;n&eacute;ral MD5) et envoyer une r&eacute;ponse <code>304 Not
Modified</code>, ce qui utilise des ressources CPU
- et réseau pour le transfert (1 paquet TCP). Pour les
- ressources supérieures à 1 ko, les ressources CPU
- consommées peuvent devenir importantes car l'en-tête
- est calculé à chaque requête. Malheureusement, il
+ et r&eacute;seau pour le transfert (1 paquet TCP). Pour les
+ ressources sup&eacute;rieures &agrave; 1 ko, les ressources CPU
+ consomm&eacute;es peuvent devenir importantes car l'en-t&ecirc;te
+ est calcul&eacute; &agrave; chaque requ&ecirc;te. Malheureusement, il
n'existe actuellement aucun moyen pour mettre en
- cache ces en-têtes.
+ cache ces en-t&ecirc;tes.
</p>
<highlight language="config">
&lt;FilesMatch "\.(jpe?g|png|gif|js|css|x?html|xml)"&gt;
FileETag None
&lt;/FilesMatch&gt;
</highlight>
-
+
<p>
- Dans l'exemple précédent: la génération d'un en-tête
- <code>ETag:</code> sera désactivée pour la plupart
- des ressources statiques. Le serveur ne génère pas
- ces en-têtes pour les ressources dynamiques.
+ Dans l'exemple pr&eacute;c&eacute;dent: la g&eacute;n&eacute;ration d'un en-t&ecirc;te
+ <code>ETag:</code> sera d&eacute;sactiv&eacute;e pour la plupart
+ des ressources statiques. Le serveur ne g&eacute;n&egrave;re pas
+ ces en-t&ecirc;tes pour les ressources dynamiques.
</p>
-
-
+
+
</section>
</section>
</section>
<section id="further-considerations">
<title>Pour aller plus loin
</title>
- <p>Armés du savoir-faire pour personnaliser un système afin
- qu'il affiche les performances désirées, nous découvrirons vite
- qu'<em>1</em> sytème à lui seul peut constituer un goulot
- d'étranglement. A ce sujet, la page du Wiki <a
+ <p>Arm&eacute;s du savoir-faire pour personnaliser un syst&egrave;me afin
+ qu'il affiche les performances d&eacute;sir&eacute;es, nous d&eacute;couvrirons vite
+ qu'<em>1</em> syt&egrave;me &agrave; lui seul peut constituer un goulot
+ d'&eacute;tranglement. A ce sujet, la page du Wiki <a
href="http://wiki.apache.org/httpd/PerformanceScalingOut">PerformanceScalingOut</a>
- décrit comment adapter un système à mesure qu'il prend de
- l'ampleur, ou comment personnaliser plusieurs systèmes dans leur
+ d&eacute;crit comment adapter un syst&egrave;me &agrave; mesure qu'il prend de
+ l'ampleur, ou comment personnaliser plusieurs syst&egrave;mes dans leur
ensemble.
</p>
</section>