¿Cuál es la forma ideal de perfilar el uso de memoria de WordPress?

8

Estamos ejecutando una instancia multisitio de WordPress en dos servidores Rackspace Cloud, una web y una base de datos, con aproximadamente 30 sitios actualmente. Puse Nginx al frente para activos estáticos y Apache maneja todas las solicitudes dinámicas. También configuré Memcached para la base de datos y el almacenamiento en caché del código operativo APC para PHP. W3 Total Cache está habilitado de forma predeterminada en todos los sitios que tenemos.

Es muy rápido con un problema: los procesos de Apache pesan regularmente entre 80 y 120 MB. El servidor web tiene 2 GB de memoria, lo que significa que obtengo aproximadamente 15 procesos hasta que todo salga mal. Los procesos obviamente no deberían ser tan grandes, pero estoy perplejo de por qué lo son.

¿Cuál es una buena estrategia para identificar lo que está pasando?

¡Gracias por adelantado!

Actualización 10/2/10: Para aquellos que se preguntan, la resolución del problema del problema de memoria fue deshabilitar PHP xdebug (se activó inadvertidamente en la configuración y causó picos de uso de memoria aleatorios).

Daniel Bachhuber
fuente

Respuestas:

4

La cantidad de memoria de proceso de Apache de la que habla (80 a 120 MB por proceso) se puede dividir en dos razones.

  1. apache
  2. Wordpress

apache

Puede optimizar Apache cargando solo la cantidad de módulos que necesita y otros ajustes de optimización que reducirán la memoria. Si aún no lo ha optimizado, dele algunos ajustes.

Wordpress

Wordpress solo consume mucha memoria y no está muy optimizado en absoluto. Comenzaría por reemplazar la clase de base de datos con algo implementado de manera más adecuada. Eso debería ganar más velocidad y reducir mucho el uso de memoria. Además de eso, no tengo mucho que sugerir. Supongo que no usar Worpdress no se considera útil.

Estrategias

Para saber qué está sucediendo, debe realizar un seguimiento de la cantidad de memoria que ocupa una solicitud de WordPress. Hay una función de uso máximo ( memory_get_peak_usage()) que puede usar para monitorear el uso de la memoria del worpdress. Si se acerca a los 80 - 120 MB sobre los que escribió, sabrá que Wordpress está creando dolores de cabeza. Es posible que desee registrar la marca de tiempo, la memoria de pico, el tiempo de ejecución y el URI solicitado.

Usar Nginx para servir páginas de wordpress en caché seguramente lo ayudará porque evitará que se cargue wordpress, incluso para esas cachés "entrantes" como la que usa. Están rotas conceptualmente porque son un complemento de wordpress, por lo que al menos una parte de wordpress debe cargarse incluso para obtener resultados en caché.

hakre
fuente
1

Daniel

Respetuosamente no estoy de acuerdo con kenkeiter, entiendo el uso de nginx como proxy inverso frente a Apache. Harvard Law ha tenido un gran éxito con este método y tienen un excelente artículo sobre cómo lo hacen, con un enlace a su complemento de WordPress que ayuda a interactuar con nginx:

http://blogs.law.harvard.edu/djcp/2010/01/nginx-as-a-front-end-proxy-cache-for-wordpress/

Lo que descubrieron en la Ley de Harvard fue que, con nginx básicamente almacenando en caché todas las solicitudes en el front-end, en realidad no mejora el rendimiento para usar otros complementos de tipo de almacenamiento en caché en el back-end, y no vale la pena la complejidad adicional. Si se toma en serio el uso de nginx de esta manera, le recomiendo que eche un vistazo a ese artículo sobre su experiencia e intente reducir los procesos dinámicos, incluido el almacenamiento en caché del lado WP.

Algunas investigaciones básicas como mirar detenidamente el acceso a Apache y los registros de errores para ver qué tipo de consultas realmente se tienen que hacer dinámicamente y tratar de reducir estos casos también puede ser un buen comienzo.

mitcho
fuente
0

Bueno, antes que nada, estás usando Apache y Nginx, algo redundante. Debería estar usando Nginx / FastCGI con PHP. El tutorial en este sitio debería ayudar. De lo contrario, mi mejor conjetura es que algún cambio reciente en su código está causando que algún error en PHP no libere la memoria correctamente. No hay razón para que un proceso de Apache consuma tanta memoria.

http://interfacelab.com/nginx-php-fpm-apc-awesome/

¡Buena suerte!

@kenkeiter


fuente
Nginx / FastCGI sería increíble, pero está fuera del alcance de la resolución de este problema
Daniel Bachhuber