Actuellement sur mon Apache 2 (Apache 2.4.7 pour être exact) sur Ubuntu 14.04, j'ai ce paramètre:
/etc/Apache2/mods-enabled/mpm_prefork.conf
<IfModule mpm_prefork_module>
StartServers 20
MinSpareServers 100
MaxSpareServers 250
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
Le serveur est un serveur Amazon de 8 Go (RAM) qui ne fait que charger un formulaire d'inscription de trois pages pour certaines campagnes publicitaires Google.
J'ai trouvé un script appelé apachetuneit.sh sur le Web, mais après un certain temps, Apache signalait cette erreur:
[Mar 21 avr 16: 45: 42.227935 2015] [mpm_prefork: erreur] [pid 1134] AH00161: le serveur a atteint le paramètre MaxRequestWorkers, envisagez d'augmenter le paramètre MaxRequestWorkers
Comment puis-je juger comment définir ces paramètres?
Je demande spécifiquement uniquement comment régler Apache 2.4 et rien d'autre. C'est pourquoi cette question est différente de cette question .
Reconnaître qu'Ubuntu 14.04 utilise Apache 2 avec PHP exécuté via un module mpm_prefork, dont un fichier modifiable se trouve dans /etc/Apache2/mods-enabled/mpm_prefork.conf . De plus, sachez qu'à partir d'Apache 2.4, MaxClients est désormais renommé MaxRequestWorkers, et donc toute documentation concernant MaxClients doit être basculée vers MaxRequestWorkers.
Arrêtez temporairement le service Web Apache avec la commande suivante:
Arrêt du service Sudo Apache2
Sudo free -ht
Lisez la ligne Mem: et regardez la colonne gratuite. Considérez cela comme la quantité de RAM que vous pouvez dédier à Apache, bien que j'aime généralement déduire 2 Go sur un serveur plus costaud (comme dans> 4 Go), ou 1 Go sur un serveur plus léger. Donc, si la colonne gratuite indiquait que j'avais 13 Go de libre, je recommanderais de donner Apache 11 Go. C'est une base de référence. Si nous rencontrons occasionnellement un problème de base de données dans les journaux (comme 3 fois dans les journaux sur une période de 3 jours) dont il a besoin de plus mémoire, alors nous pourrions considérer que nous n'avions que 10 Go pour jouer au lieu de 11 Go (dans ce cas). Si nous rencontrons dans les journaux Apache que le serveur a besoin de plus de MaxRequestWorkers, alors c'est un problème distinct que j'aborderai ci-dessous.
Sudo service Apache2 start
Ouvrez comme 10 onglets de navigateur, connectez-vous à certaines de vos pages de chargement plus longues ou plus lentes à partir de votre site Web et actualisez-les 3-4 fois sur chaque onglet.
Après cela, exécutez rapidement la commande suivante:
Sudo ps -ylC Apache2 | awk '{x + = 8 $; y + = 1} END {print "Utilisation de la mémoire Apache (Mo):" x/1024; imprimer "Taille moyenne du processus (Mo):" x/((y-1) * 1024)} '
Exécutez-le comme 5 fois rapidement.
Regardez la valeur de taille moyenne du processus et faites la moyenne de cette valeur parmi les 5 fois où vous l'avez exécutée.
Faites maintenant le calcul suivant et assurez-vous de convertir GB en Mo si nécessaire afin que tous les nombres soient en valeurs MB. Donc, multipliez par 1024 ou divisez par 1024, selon le chemin à parcourir.
MaxRequestWorkers = Baseline Free (avec espace tampon)/Avg Process Size
Par exemple, j'avais un serveur de 14 Go, mais quand Apache a été arrêté, le serveur a montré qu'il utilisait 1 Go RAM inactif. Je fournis ensuite 1 Go supplémentaire dans un espace tampon supplémentaire pour le système d'exploitation au cas où il en aurait besoin). Cela signifie que j'aurais une Baseline Free de 12 Go. Maintenant, je dois la convertir de Go en Mo, et donc je multiplie 12 x 1024 et j'obtiens 12288. Le 12288 Mo est ma valeur Baseline Free. Dans mon cas, j'ai vu que le La taille moyenne du processus était de 21 Mo. Donc, je prends 12288/21 et j'obtiens environ 585. Maintenant, il est courant que les sysops arrondissent cette valeur, et j'ai donc obtenu 580.
`<IfModule mpm_prefork_module>`
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxRequestWorkers XXX
ServerLimit XXX
MaxConnectionsPerChild 0
</IfModule>
Notez que vous ne pouvez pas y voir le paramètre ServerLimit. Ajoutez-le. Ce paramètre par défaut à 256 s'il n'est pas présent, mais doit avoir la même valeur que MaxRequestWorkers ou vous obtiendrez une erreur.
Un autre facteur critique dans votre configuration Apache est le fichier /etc/Apache2/Apache2.conf avec la variable Timeout et est mesuré en secondes. Il s'agit de la durée pendant laquelle vous pouvez envoyer ou recevoir du serveur avant son expiration. Vous devez également garder à l'esprit un téléchargement de fichier ou un téléchargement de fichier, comme si vous avez un site Web où les gens peuvent télécharger ou télécharger CSV ou d'autres fichiers volumineux, par exemple. Et vous devez garder à l'esprit un serveur de base de données occupé et où vous devrez peut-être prévoir un certain temps avant l'expiration des pages. Plus la variable Timeout est petite, plus le serveur Web est disponible pour recevoir de nouvelles connexions. Notez, cependant, que la définition de cette valeur trop basse peut causer des ravages avec PHP variables de session, mais pas avec les cookies basés sur la session du navigateur. Ainsi, par exemple, une valeur de 300 (5 minutes) peut être bon pour un serveur Web qui repose sur PHP variables de session pour le flux de travail d'application Web au lieu de cookies de session de navigateur. Une valeur de 45 pourrait être bonne pour un serveur Web qui ne sert rien de plus que de la publicité statique des pages de destination, mais ce serait terrible pour un serveur qui a besoin d'utiliser PHP variables de session beaucoup. Donc, éditez le paramètre Timeout dans ce fichier au montant dont vous avez besoin. Cela peut prendre quelques tests avec toutes vos pages Web pour voir si la valeur est trop faible. C'est probablement une bonne idée, cependant, de ne pas la définir au-dessus de 300, sauf si vous rencontrez des problèmes lors de téléchargements de fichiers volumineux ou de téléchargements de fichiers volumineux.
Redémarrez maintenant votre service Web Apache. Si vous avez fait quelque chose de mal, Apache vous en informera probablement au moment où vous le redémarrerez et vous pourrez y remédier.
Redémarrage du service Sudo Apache2
Sudo tail -f /var/log/Apache2/error.log
... appuyez sur CTRL + C pour sortir de cela, si vous le souhaitez.
Recherchez une plainte concernant le besoin de MaxRequestWorkers (et récemment depuis que vous avez redémarré le serveur Web). Si vous voyez que même avec un paramètre MaxRequestWorkers optimal, vous avez probablement besoin de plus de puissance de feu pour vos sites Web ou applications Web. Considérez ces options:
Ce à quoi vous pouvez augmenter MaxRequestWorkers dépend de la quantité de RAM que prend chacun de vos processus httpd/Apache. Si chacun prend 50 Mo (il suffit de choisir un nombre aléatoire), toutes les 20 demandes de travail que vous utilisez en même temps (c'est-à-dire les connexions simultanées) prendront 1 Go. Donc, dans cet exemple, vous pourriez avoir au plus 8 Go * 20 = 160 MaxRequestWorkers. Cependant, vous ne pouvez pas utiliser tous les RAM pour Apache, vous devez en réserver pour d'autres choses qui s'y déroulent. Laisser également un peu de RAM peut être utile pour les performances car le système d'exploitation l'utilisera pour mettre en cache les choses et accélérer les performances (bien qu'il soit préférable de ne pas manquer de connexions par rapport au serveur étant très rapide car le site apparaîtra lentement pendant que les navigateurs des utilisateurs attendent qu'une connexion soit disponible s'ils sont tous utilisés).