Avoir des problèmes avec l' utilisation de la mémoire httpd
( Apache/2.2.29
).
Au fil du temps, l'utilisation de la mémoire dans les httpd
processus augmente jusqu'à ce qu'elle atteigne finalement 100%.
La dernière fois que j'ai redémarré, httpd
c'était il y a environ 24 heures. La sortie de free -m
est:
[ec2-user@www ~]$ free -m
total used free shared buffers cached
Mem: 1655 1415 239 0 202 424
-/+ buffers/cache: 788 866
Swap: 1023 4 1019
Pour prouver que c'est définitivement httpd
, j'ai redémarré httpd
et j'ai couru à free -m
nouveau:
[ec2-user@www ~]$ sudo service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[ec2-user@www ~]$ free -m
total used free shared buffers cached
Mem: 1655 760 894 0 202 360
-/+ buffers/cache: 197 1457
Swap: 1023 4 1019
Ainsi, le redémarrage d'Apache prend de la mémoire libre de 239 Mo à 894 Mo - ce qui semble être un grand saut.
J'ai parcouru la liste des modules Apache actuellement activés (il y en a beaucoup) et désactivé / supprimé mod_wsgi
etmod_perl
(aucun d'entre eux n'est requis pour ce serveur, qui exécute une application Web basée sur PHP - Magento, en particulier).
Basé sur https://servercheck.in/blog/3-small-tweaks-make-apache-fly , j'ai exécuté ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
et obtenu la sortie suivante:
[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
15.1328 MB
118.09 MB
127.449 MB
129.059 MB
117.734 MB
113.824 MB
125.062 MB
123.922 MB
119.855 MB
108.066 MB
136.23 MB
114.031 MB
113.27 MB
110.695 MB
102.113 MB
113.234 MB
186.816 MB
118.602 MB
0.835938 MB
L'exécution de l'autre outil de diagnostic suggéré pour MaxClients
lequel ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
renvoie les éléments suivants:
[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB
Ce serveur ( m1.small
instance Amazon AWS ) dispose 1.7 Gb
de RAM. Ainsi donc:
Avez-vous d'autres pointeurs / suggestions sur la meilleure façon de modifier les httpd
paramètres ou de diagnostiquer exactement ce qui pourrait en être la cause?
la source
-/+ buffers/cache
ligne; cependant, dans ce cas, le changement est comparable. Selon la façon dont apache a été réglé, il peut commencer avec seulement quelques processus prêts à traiter les demandes; après une période de nombreuses demandes simultanées, il y aura probablement plus de processus bifurqués pour gérer la charge. Le nombre de processus inactifs peut également être réglé. Donc, si apache se développe pour utiliser trop de mémoire, vous devez faire quelques réglages.nginx
alors il est peut-être temps d'essayer, mais honnêtement, j'utilise Apache depuis des années et je n'ai jamais eu de problème majeur. Magento mâche vraiment la mémoire.grep httpd
processus (au moins pour moi). Pour résoudre ce problème, je recommanderais d'exclure cette ligne du calcul comme ceci:ps aux | grep 'httpd' | grep -v grep | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
Réponses:
Voici ce que j'ai fait pour le «résoudre»:
MaxClients 7
(basé sur(1740.8Mb Memory on server - 900Mb for MySQL + other stuff) / 111Mb average usage per httpd process = 7.5747747747747747747747747747748
)Donc:
Désactiver tous les modules Apache à l' exception
authz_host_module
,log_config_module
,expires_module
,deflate_module
,setenvif_module
,mime_module
,autoindex_module
,negotiation_module
,dir_module
,alias_module
,rewrite_module
,php5_module
Supprimez le
mod_ssl
package car le client n'utilise pas duhttps://
tout.Je ferai rapport une fois que cette nouvelle configuration aura fonctionné un certain temps pour voir si cela le résout.
Une inspiration ici a été empruntée à: http://www.activoinc.com/blog/2009/08/31/performance-optimized-httpd-conf-for-magento-ecommerce/ et http://www.activoinc.com/ téléchargements / httpd.conf-magento
la source
httpd
semblent avoir complètement disparu.Je crains que l'option MaxRequestsPerChild ait aidé dans votre cas, car elle permet le recyclage des processus après un nombre défini de demandes, donc une fuite de mémoire est là, mais n'est plus visible.
De plus: MaxClients = ServerLimit * ThreadsPerChild
Dans votre cas, si vous n'avez besoin que de 7 utilisateurs simultanés (MaxClients = 7), cela suffit totalement avec 2 processus (juste au cas où l'un ne parviendrait pas à minimiser les temps d'arrêt), la configuration peut donc être:
J'utilise MaxClients 8 , juste pour faire une distribution de demande plus égale entre 2 processus.
la source