Le paramètre principal pour ajuster l'utilisation de la mémoire d'Apache sera MaxClients
. Une valeur trop faible et vous manquerez d'emplacements disponibles pour répondre aux demandes des clients. Trop et vous utiliserez toute votre RAM et commencerez à utiliser l'espace de swap qui tuera les performances (cela peut sembler être un crash du serveur).
Une façon de régler MaxClients
est d'observer l'utilisation de la mémoire du système et d'ajuster la configuration en fonction des besoins. Si le serveur commence à échanger, modifiez-le. Si le serveur a de la mémoire disponible, installez-le.
Vous pouvez également estimer la valeur maximale en examinant l'utilisation de la mémoire d'Apache. Démarrez top
et appuyez sur M
pour trier les processus par mémoire. Vous devriez voir quelque chose comme:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18698 apache 17 0 141m 59m 41m S 0.0 1.6 4:57.46 httpd
18591 apache 17 0 141m 59m 41m S 0.0 1.5 4:54.79 httpd
22917 apache 16 0 141m 57m 39m S 0.0 1.5 4:57.44 httpd
18595 apache 16 0 142m 57m 38m S 0.0 1.5 5:23.43 httpd
18697 apache 16 0 139m 56m 41m S 0.0 1.5 5:09.29 httpd
18735 apache 25 0 141m 56m 38m S 0.0 1.5 5:05.32 httpd
Soustrayez les colonnes RES et SHR pour obtenir l'utilisation approximative de la mémoire par instance Apache. Dans ce cas, il est d'environ 16 Mo. Si j'ai 4 Go de RAM et souhaite que 3 Go soient utilisés pour Apache, mon paramètre MaxClients sera d'environ:
MaxClients = 3000/16 = 188
Donc, dans ce cas, je pourrais commencer avec une valeur de 150-200 mais je surveillerais l'utilisation de la mémoire et si cela commençait à se rapprocher de l'utilisation du swap, je diminuerais MaxClients de 10 à 20%. Notez également que la valeur de 3 Go n'est qu'un exemple aléatoire. Sur les serveurs exécutant uniquement Apache, je pourrais peut-être utiliser la quasi-totalité des 4 Go. Dans d'autres cas, je ne voudrais que 1 ou 2 Go pour Apache, sauf le reste pour d'autres applications, le système ou le cache.
Modifier: répondre à des questions supplémentaires
Il n'y a généralement aucune valeur magique de MaxClients ou des autres paramètres de configuration Apache qui rendra votre serveur soudainement deux fois plus rapide. Certains serveurs sembleront fonctionner très bien, que MaxClients soit 10 ou 1000. Il existe deux cas principaux où le paramètre MaxClients est "mauvais":
- Trop bas : lorsque MaxClients est trop bas, vous atteindrez une situation où tous les clients Apache sont utilisés et de nouvelles connexions vont dans une file d'attente en attendant que le prochain client soit disponible. Si vous activez le mod_status d'Apache, vous pouvez obtenir une vue en temps réel du nombre de clients occupés à un moment donné. Cet état est relativement facile à diagnostiquer car le site deviendra lent pendant les périodes de fort trafic et tous les clients peuvent être observés comme étant en cours d'utilisation.
- Trop élevé : lorsque MaxClients est trop élevé, vous entrerez dans le cas de l'épuisement de toute la RAM et commencerez à utiliser le swap. Lorsque cela se produit, les performances de votre site chuteront à pratiquement zéro (considérez la différence de vitesse entre la RAM et le disque). Cet état peut être beaucoup plus difficile à observer et à diagnostiquer car un serveur fonctionnera très bien avec un MaxClients élevé jusqu'à ce qu'il subisse une pointe de trafic. Par exemple, sur un site qui reçoit quelques visites par heure, je peux définir MaxClients à 1000, bien plus que ce qui est supportable par la RAM, mais je n'ai jamais vu de problème car Apache n'a besoin d'utiliser qu'un ou deux clients à la fois. Je ne repérerai le problème que lorsque j'aurai un pic de trafic, augmentant le nombre de clients utilisés simultanément, jusqu'à ce que la RAM soit épuisée et que l'espace de swap soit nécessaire.
Bien que je ne connaisse pas les détails de votre serveur, application ou trafic, je peux suggérer les valeurs de configuration suivantes comme point de départ. Essayez-les, surveillez la charge et l'utilisation du serveur et modifiez les paramètres selon vos besoins.
- mod_status : activez cette option pour voir l'utilisation d'Apache. Pour des statistiques plus avancées, installez une application de surveillance comme Zabbix / Nagios afin de pouvoir suivre l'utilisation du serveur et les modèles de trafic.
- MaxClients : définissez une valeur de 100-200. Je commencerais avec une valeur inférieure en cas de doute et surveiller l'utilisation de la mémoire / CPU / Apache. Ce sera le paramètre principal à modifier.
- MaxRequestsPerChild : cela spécifie quand un client / enfant Apache sera redémarré. Il n'y a pas de mauvaise valeur (bien que de très petites valeurs puissent être inefficaces) et cela dépendra du contenu de votre portion. Pour le contenu dynamique, une grande valeur non nulle (disons 1000) empêchera vos processus httpd de devenir éventuellement trop volumineux.
- Autres paramètres : Bien que je n'aie pas effectué d'analyse comparative approfondie des paramètres restants, ils devraient avoir un effet relativement mineur, sauf si vous les définissez sur des valeurs très faibles ou très élevées. L'utilisation des valeurs par défaut devrait convenir à la majorité des sites. Voir la documentation du module Apache Prefork ou Worker pour une description complète des paramètres et qui est utilisé dans chaque module (il est inutile d'essayer de régler un paramètre que vous n'utilisez pas).
- Analyse comparative : lorsque vous ajustez les paramètres, je recommanderais d'utiliser un outil d'analyse comparative comme ab (ApacheBench) ou siège pour obtenir un nombre quantitatif sur les capacités de votre serveur. Se fier uniquement à la sensation ou pire, voir s'il se bloque ou non, n'est pas une bonne méthode pour régler les paramètres d'un serveur Web.