Réglage du paramètre MaxClients d'Apache sur un site à haut trafic
L'un des paramètres ayant l'un des impactes les plus forts sur le comportement d'Apache sur un site Web avec un haut niveau de trafic, c'est la valeur attribuée au paramètre MaxClients situé par exemple dans le fichier «httpd.conf». Celui-ci permet de définir le nombre de requêtes simultanées pour se produire sur un serveur Web. Toute les demande de connexions de navigateur Webs se produisant au delà de cette limite sera mise en attente ou recevra un message d'erreur «403 Forbidden».
Le «prefork» d'Apache : StartServers, MaxSpareServers et MinSpareServers
Dans la plupart des situations, on utilise Apache en «prefork», c'est à dire un processus par connexion. Ainsi, le bassin de processus prefork est en mode veille pour les connexions. Le nombre de processus de réserve est définit par les valeurs MaxSpareServers et MinSpareServers, tandis que le nombre à démarré est définit par StartServers.
La valeurs par défaut du MaxClients
La valeur par défaut du MaxClients est compilé avec une valeur 256 en dure dans le code. Toutefois, on peut changer la constante «DEFAULT_MAX_CLIENTS» dans en recompilant Apache. Toutefois, certaines distributions pour entreprises et des sociétés d'hébergement augmentent cette limite à des valeurs très élevé, comme par exemple 512 ou 1024 afin de faire face à un haut niveau de trafic.
L'augmentation de cette valeur a normalement un effet bénéficte avec des sites statiques en HTML et en images, mais elle a plutôt l'effet contraire avec des sites dynamiques comme Drupal et WordPress par exemple. Ainsi, dans le cas de site dynamique, une valeur trop élevé pourra faire planter carrément le serveur Web !
Débordement
La raison derrière se débordement excessif, c'est que lorsque le site Web connaît un pic de trafic ou un goulot d'étranglement dans la base de données, les demandes entrantes font que les nouveaux processus sont générés à un taux plus élevé que la vitesse à laquelle les anciens processus peuvent être complété. Cette situation provoque une condition dans laquelle le système continue de créer de nouveaux processus de débordement de mémoire disponible et il commence alors à utiliser l'espace d'échange mémoire avec le disque. Ainsi, lorsqu'on arrive à ce point, il y a presque toujours des débordements, dans lequel le système ne fait plus qu'échanger des pages de mémoire physique avec la mémoire virtuelle (sur disque) et vice versa, sans faire de véritable travail. On peut constater assez facilement cette situation, lorsqu'elle se produit, en utilisant la commande «vmstat». Ainsi, pour maîtriser un débordement, il faut appliquer une formule assez précise car le système ne pourra pas récupérer et plantera. Voici la formulaire à appliquer à MaxClients sur un système utilisant par exemple Linux/Apache/PHP/Drupal/MySQL :
MaxClients ← (Mémoire total physique de la machine - Mémoire du système d'exploitation Linux - Mémoire de base de données MySQL ) ÷ Taille par processus Apache |
Si votre hébergeur à configurer vos serveur avec toutes sortes de modules et d'extensions (comme mod_perl, mod_python, mod_php,..), Apache peut facilement atteindre 20 Mo par processus qu'il lance. Si vous disposez de 1024 Mo, vous pouvez installer environ 50 processus Apache. Ainsi, vous devez vous assurez d'avoir supprimer tous les modules et extensions inutiles d'Apache, d'avoir installé un cache, et d'utiliser un accélérateur de code PHP, vous obtiendrez un environ 12 Mo par processus Apache utilisé. Cette taille est approximatif et dépendant du nombre de module que vous avez installé. Même si l'on dispose de 2 Go de mémoire et que l'on délègue 250 Mo pour le système et la base de données MySQL, avec un processus de de 15 Mo, on peut attribué 115 processus aux 1 750 Mo restant. Aussi, plus vous donnez de mémoire au système et à la base de données, plus vous mettez en cache le système de fichiers et vous évitez ainsi des lectures et écritures vers le disque et vous n'utiliserez pas toute la mémoire disponible pour MaxClients.
Remarques
- ServerLimit : Sur certains système, il existe un second paramètre permettant de définir une limite supérieur comme MySQL. Ainsi, si par exemple, le ServerLimit est définit à 256, et que vous souhaitez augmenter MaxClients à 300, vous ne pourrez pas le faire, car la variable ServerLimit doit d'abord être fixé à 300.
- La variable MaxClients n'est pas une variable magique où l'on doit mettre n'importe quel valeur, car elle ne préviendra pas un DoS, ainsi dans cette situation vous devriez plutôt vous intéresser au «mod_evasive» par exemple.
Voir également
Référence des codes d'erreur - 403 Forbidden