La machine qui héberge ce serveur web est une boite “kimsufi” chez OVH qui a la particularité de ne disposer que de 256 Mo de RAM. Eh oui on se croirait revenir à l’age de pierre :o ).

En commenceant ce blog je trouvais que le serveur web était excessivement lent. Je viens d’en trouver la raison. La configuration par défaut du package RPM de apache que nous utilisons démare pas moins de 20 process httpd qu occupent chacun au moins 16 Mo de mémoire résidente. Sans rien faire on arrive déjà à saturer la mémoire physique donc la moitié au moins des process se trouve swappé sur disque dès le démarrage.

Si par malheur une nouvelle connexion tombe sur un des process swappé, le système doit commencer par sortir le process du swap, en faisant éventuellement de la place auparavant en swappant un autre process, puis il peut triater la requète. Ce faisant il perd plusieurs secondes avant de commencer à traiter les requètes.

Partant de ce constat une rapide requète google sur le tuning de apache pour les configurations faibles en mémoire fait remonter le site: http://emergent.urbanpug.com/?p=60 dont je recommande la lecture.

Cela m’a amené à remplacer la configuration par défaut:

<IfModule prefork.c>
StartServers       8
MinSpareServers   5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

Par la configuration suivante:

<IfModule prefork.c>
StartServers       1
MinSpareServers    1
MaxSpareServers   6
ServerLimit      256
MaxClients       10
MaxRequestsPerChild  300
</IfModule>

Un redémarrage de Apache suffit pour voir les bienfaits de ce setup. Au démarrage, on ne voit que 2 process (1 démarré par défaut + 1 spare) et ce nombre augmente progressivement pour atteindre le maximum de 6. Je contnuerai le tuning par l’inventaire des modules qu’on peut supprimer pour aléger les process, et par l’examen du KeepAlive.