Estamos ejecutando un sitio web pesado de Drupal que realiza modelos financieros. Parece que nos encontramos con algún tipo de pérdida de memoria dado el hecho de que las horas extra la memoria utilizada por apache crece mientras el número de procesos de apache se mantiene estable:
Sabemos que el problema de memoria proviene de apache / PHP porque cada vez que emitimos un /etc/init.d/httpd reload
uso de memoria disminuye (vea la captura de pantalla anterior y las salidas CLI a continuación):
Antes de recargar httpd
$ gratis total de buffers compartidos gratuitos usados en caché Mem: 49447692 45926468 3521224 0 191100 22609728 - / + buffers / cache: 23125640 26322052 Intercambio: 2097144 536552 1560592
Después de httpd reload
$ gratis total de buffers compartidos gratuitos usados en caché Mem: 49447692 28905752 20541940 0 191360 22598428 - / + buffers / cache: 6115964 43331728 Intercambio: 2097144 536552 1560592
A cada subproceso de Apache se le asigna un PHP memory_limit
de 512 MB, lo que explica el alto uso de memoria que representa el bajo volumen de solicitudes, y un max_execution_time
de 120 segundos que debería terminar los subprocesos cuya ejecución lleva más tiempo y, por lo tanto, debe evitar el crecimiento constante en el uso de memoria que estamos viendo.
P: ¿Cómo podríamos investigar qué está causando esta pérdida de memoria?
Idealmente, estoy buscando pasos de solución de problemas que pueda realizar en el sistema sin tener que molestar al equipo de desarrollo.
Información adicional:
OS: RHEL 5.6
PHP: 5.3
Drupal: 6.x
MySQL: 5.6
Para su información, somos conscientes del problema de intercambio que estamos investigando por separado y no tiene nada que ver con la pérdida de memoria que hemos observado antes de que el intercambio comenzara a ocurrir.
memcached
biblioteca PHP . Según la página de administración de memcache memcache.php
, todo lo que podemos ver es que hemos asignado 5GB
a memcache, de la cual 3.3GB
se está utilizando. Sería genial si nos puede ayudar más aquí.
memcached
demonio en sí mismo probablemente esté bien. Es la biblioteca de memcache de PHP la que puede o no perder memoria (y, por lo tanto, aumentar el uso de memoria de los procesos de Apache). Mi problema fue hace aproximadamente 1-2 años, por lo que las cosas podrían haberse solucionado después de eso. De todos modos, si memcached no es obligatorio para usted, intente deshabilitarlo por un tiempo y ver si el uso de la memoria de Apache aún crece.
httpd
, el uso de la memoria sigue creciendo y la caja finalmente se bloquea con algunos mensajes de kernel sin memoria. Las prestaciones son buenas (hasta que el uso de la memoria se acerque al límite de la memoria). Ignora el problema de intercambio.