it-swarm-es.com

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

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

Es extremadamente rápido con un solo 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 unos 15 procesos hasta que las cosas se ponen en marcha. Obviamente, los procesos no deberían ser tan grandes, pero estoy perplejo en cuanto a por qué lo son.

¿Cuál es una buena estrategia para identificar qué está pasando?

¡Gracias por adelantado!

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

8
Daniel Bachhuber

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 has optimizado, dale algunos retoques.

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 más implementado adecuadamente. Eso debería ganar más velocidad y reducir mucho el uso de la memoria. Junto a eso no tengo mucho que sugerir. No usar Worpdress no se considera útil, supongo.

Estrategias

Para saber qué sucede, debe hacer 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 de trabajo. Si se acerca a los 80 - 120 MB que escribiste, sabes que WordPress está causando dolores de cabeza. Es posible que desee registrar la marca de tiempo, la memoria máxima, el tiempo de ejecución y el URI solicitado.

El uso de Nginx para servir páginas de wordpress en caché sin duda lo ayudará porque evitará que se carguen wordpress, incluso para esos caches de "entrada" como el que usa. Se rompen conceptualmente porque son un complemento de wordpress, por lo que al menos una parte de wordpress debe cargarse incluso para obtener resultados en caché.

4
hakre

Daniel

Respetuosamente no estoy de acuerdo con Kenkeiter, entiendo que usar nginx como proxy inverso frente a Apache. Harvard Law ha tenido un gran éxito con este método y tienen un gran 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 Harvard Law fue que, con nginx básicamente almacenando en caché todas las solicitudes en el front-end, en realidad no mejora el rendimiento al usar otros complementos de tipo caché en el backend, y no merece la pena la complejidad adicional. Si está dispuesto a usar 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 del WP.

Algunos datos básicos, como observar cuidadosamente el acceso a Apache y los registros de errores para ver qué tipo de consultas se deben realizar de forma dinámica y tratar de reducir estos casos, también pueden ser un buen comienzo.

1
mitcho

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

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

¡Buena suerte!

@kenkeiter

0
kenkeiter