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 .
la source
Réponses:
Reconnaissez qu'Ubuntu 14.04 utilise Apache 2 avec PHP fonctionnant 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 que toute documentation concernant MaxClients doit être basculée vers MaxRequestWorkers.
Arrêtez temporairement le service Web Apache avec la commande suivante:
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 disait que j'avais 13 Go gratuits, je recommanderais de donner Apache 11 Go. C'est une 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) avec lequel il a besoin de plus de 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.
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:
Exécutez-le comme 5 fois rapidement.
Regardez la valeur de la 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) / Taille de processus moyenne
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 de RAM en veille. Je fournis ensuite un autre 1 Go 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 ligne de base sans 12 Go. Maintenant, je dois le 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 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.
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 les variables de session PHP, mais pas avec les cookies basés sur la session du navigateur. Ainsi, par exemple, une valeur de 300 (5 minutes) peut être bonne pour un serveur Web qui s'appuie sur des variables de session PHP pour le flux de travail de l'application Web au lieu des cookies de session du navigateur. Une valeur de 45 pourrait être bonne pour un serveur Web qui ne sert rien de plus que des pages de destination de publicité statique, mais serait terrible pour un serveur qui a besoin d'utiliser beaucoup de variables de session PHP. Modifiez donc le paramètre Timeout de ce fichier selon la quantité dont vous avez besoin. Cela peut prendre quelques tests avec toutes vos pages Web pour voir si la valeur est trop faible. Cependant, c'est probablement une bonne idée de ne pas le définir à plus 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. mais ce serait terrible pour un serveur qui a besoin d'utiliser beaucoup de variables de session PHP. Modifiez donc le paramètre Timeout de ce fichier selon la quantité dont vous avez besoin. Cela peut prendre quelques tests avec toutes vos pages Web pour voir si la valeur est trop faible. Cependant, c'est probablement une bonne idée de ne pas le définir à plus 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. mais ce serait terrible pour un serveur qui a besoin d'utiliser beaucoup de variables de session PHP. Modifiez donc le paramètre Timeout de ce fichier selon la quantité dont vous avez besoin. Cela peut prendre quelques tests avec toutes vos pages Web pour voir si la valeur est trop faible. Cependant, c'est probablement une bonne idée de ne pas le définir à plus 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.
... 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:
la source
sudo
doivent être affichées sous forme de code et non sous forme de texte normal. J'ai suivi la documentation sur le formatage, mais j'ai encore du mal ici.Ce à quoi vous pouvez augmenter MaxRequestWorkers dépend de la quantité de RAM que chacun de vos processus httpd / apache occupe. 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 toute la RAM pour apache, vous devez en réserver pour d'autres choses qui s'y déroulent. Il peut également être utile de laisser un peu de RAM disponible 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 lent pendant que les navigateurs des utilisateurs attendent qu'une connexion soit disponible s'ils sont tous utilisés).
la source
free
commande pour obtenir une ligne de base de mémoire. Augmentez ensuite le nombre de processus en cours d'exécution en augmentant MinSpareServers, en redémarrant apache, en exécutant àfree
nouveau et en faisant le calcul. Consultez moreofless.co.uk/apache-memory-usage pour plus de détails et d'explications.