Tener algunos problemas con el uso de la memoria httpd
( Apache/2.2.29
).
Con el tiempo, el uso de memoria en los httpd
procesos aumenta progresivamente hasta que finalmente es del 100%.
La última vez que reinicié httpd
fue hace unas 24 horas. Salida de free -m
es:
[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
Para demostrar que es definitivamente httpd
, reinicié httpd
y corrí free -m
nuevamente:
[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
Entonces, reiniciar Apache requiere memoria libre de 239 Mb a 894 Mb, lo que parece un gran salto.
He estado revisando la lista de módulos de Apache actualmente habilitados (hay muchos) y deshabilitado / eliminado mod_wsgi
y mod_perl
(ninguno de los cuales son necesarios para este servidor, que ejecuta una aplicación web basada en PHP, específicamente Magento).
Basado en https://servercheck.in/blog/3-small-tweaks-make-apache-fly , ejecuté y obtuve ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
el siguiente resultado:
[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
Al ejecutar la otra herramienta de diagnóstico sugerida para la MaxClients
cual se ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
devuelve lo siguiente:
[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB
Este servidor ( m1.small
instancia de Amazon AWS ) tiene 1.7 Gb
RAM. Asi que, por lo tanto:
¿Alguna otra sugerencia / sugerencia sobre cómo ajustar mejor la httpd
configuración o cómo diagnosticar qué podría estar causando esto?
fuente
-/+ buffers/cache
línea; Sin embargo, en este caso el cambio es comparable. Dependiendo de cómo se haya ajustado Apache, puede comenzar con solo un par de procesos listos para manejar solicitudes; Después de un período de muchas solicitudes concurrentes, probablemente habrá más procesos bifurcados para manejar la carga. El número de procesos inactivos también se puede ajustar. Entonces, si apache crece para usar demasiada memoria, necesita hacer algunos ajustes.nginx
así que tal vez es hora de que lo intentemos, pero honestamente, he estado usando Apache durante años y nunca tuve ningún problema importante. Sin embargo, Magento realmente mastica la memoria.grep httpd
proceso (al menos para mí). Para solucionarlo, recomendaría excluir esa línea del cálculo de esta manera:ps aux | grep 'httpd' | grep -v grep | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
Respuestas:
Esto es lo que he hecho para 'resolverlo':
MaxClients 7
(basado en(1740.8Mb Memory on server - 900Mb for MySQL + other stuff) / 111Mb average usage per httpd process = 7.5747747747747747747747747747748
)Por lo tanto:
Desactivar todos los módulos de Apache a excepción de
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
Elimine el
mod_ssl
paquete ya que el cliente no está usandohttps://
nada.Informaré una vez que esta nueva configuración se haya estado ejecutando durante un tiempo para ver si esto la resuelve.
Un poco de inspiración aquí fue tomada de: http://www.activoinc.com/blog/2009/08/31/performance-optimized-httpd-conf-for-magento-ecommerce/ y http://www.activoinc.com/ descargas / httpd.conf-magento
fuente
httpd
parecen haber desaparecido por completo.Me temo que la opción MaxRequestsPerChild ayudó en su caso, ya que permite el reciclaje del proceso después de un número definido de solicitudes, por lo que la pérdida de memoria está allí, pero ya no es visible.
Además: MaxClients = ServerLimit * ThreadsPerChild
En su caso, si necesita solo 7 usuarios simultáneos (MaxClients = 7), es totalmente suficiente con 2 procesos (solo en caso de que uno no pueda minimizar el tiempo de inactividad), por lo que la configuración puede ser:
Utilizo MaxClients 8 , solo para hacer una distribución de solicitud más equitativa entre 2 procesos.
fuente