¿Qué contribuye todo al tiempo de ejecución de la página drupal?

17

Tengo un sitio que estoy investigando que tiene problemas importantes de rendimiento, usando memcache pude reducir el número de consultas tanto en número como en tiempo de ejecución total (de 3 segundos a 230 ms) pero el tiempo de ejecución de la página me está eludiendo (estoy mirando los valores generados por el desarrollo), entiendo que el tiempo de ejecución de la página = el tiempo necesario para que php se ejecute, por lo tanto, instalé APC y puedo ver el código de operación de php almacenado en caché y las estadísticas que muestran éxitos en el panel de control de APC (apc.php enviado con APC) pero el tiempo de ejecución de mi página no disminuye. Entonces creo que mi pregunta es doble:

  • ¿Qué contribuye todo (mejor ralentiza) el tiempo de ejecución de la página? ¿Es solo tiempo para ejecutar php?
  • ¿Qué enfoques debo tomar para reducir el tiempo de ejecución de la página? Probé APC pero no me ayudó mucho.

El número de módulos de PS utilizados en este sitio es enorme (168) pero en este momento no estoy en condiciones de hacer esa recomendación, es más como un incendio en la situación del agujero.

Editar: Salida de ejecutar xhprof en una instancia local (recomendado por mikeytown), esto parece una locura, creo que los resultados posteriores se deben a una paliza. diff ejecuta para la misma url tiene una diferencia drástica y es demasiado uso de recursos. Tampoco estoy seguro de por qué muestra valores que no son de hoy: | (Acabo de instalar xhprof en esta computadora portátil)

Salida de ejecutar xhprof en instancia local

Dipen
fuente

Respuestas:

4

Obtenga una memoria caché de su sitio. xdebug o xhprof pueden generar uno. Esto le dirá qué funciones están tardando más en ejecutarse. Hasta que hagas esto, es un mal juego de adivinanzas.

mikeytown2
fuente
Hola, gracias por la sugerencia que acabo de ejecutar xhprof en mi versión de desarrollo local (computadora portátil no en el servidor) y veo esto: picasaweb.google.com/lh/photo/… ¿Es esto real? Quiero decir, ¿es posible que una página consuma 750 Mb de memoria?
Dipen
¿Podría ser porque la paliza? los datos perfilados posteriores para la misma url, si observa la parte inferior, la misma url requiere muchos menos recursos, pero una ejecución de diferencias muestra una utilización de recursos completamente diferente y extrema.
Dipen
1
Realmente depende, pero para el 99.9% de las configuraciones si usa más de 100 MB de RAM, algo está mal.
mikeytown2
Aparte del número de módulos, ¿podría haber algo más mal? No estoy seguro de si los módulos se pueden eliminar de la producción de inmediato. Por cierto, en local estoy usando nginx + php-fpm y en producción el sitio está usando lighspeed con cgi rápido.
Dipen
1
Debe profundizar en la memoria caché y enumerar qué función está consumiendo todo su tiempo. img715.imageshack.us/i/cgrindout.png
mikeytown2
1

EDITAR: leí mal la publicación original. 168 módulos es mucho, y 300 a 700 ms de consultas SQL es enorme . Cuantos más módulos use, más consultas serán tan pronto como los módulos realicen algunas.

Use el almacenamiento en caché agresivo mientras pueda, guarde en caché todo, si no es suficiente, intente con un caché de proxy inverso. Usar un CDN para archivos puede mejorar enormemente todo el asunto. Un caché de proxy inverso también puede ayudarlo al eliminar algunas cookies de autenticación al acceder a páginas que no lo necesitan (entonces el núcleo pensará que el usuario es anónimo para ellos y maximizará el almacenamiento en caché).


El dinamismo central de Drupal hace que todo el amanecer sea lento tan pronto como tenga demasiados módulos interactuando al mismo tiempo.

Yo diría, por ejemplo, si usa muchos módulos que cargan datos en el tiempo hook_node_load () en lugar de usar campos, hará muchas consultas mientras que el uso del campo garantizaría la eficiencia del almacenamiento en caché.

La representación también puede llevar mucho tiempo, drupal_render () (la API de representación que se llama en algún momento) es una buena pieza de API (realmente útil) pero también un poco lenta. Cambiar a PDO (D7) y el DBTNG completo (que es genial por cierto) también agrega latencia no despreciable.

Dicho esto, el núcleo en sí mismo es bastante rápido (pero hace demasiadas consultas SQL, incluso con casi nada instalado), los módulos mal codificados a menudo son el cuello de botella.

APC puede dividir el tiempo de ejecución por 2 o 3, según el código que se ejecute. si lo configura bien (habilite todas las optimizaciones de APC, el manual oficial de APC está bien escrito y lo guiará).

Si está en una caja con un sistema de archivos lento (sistema de archivos de red o disco duro lento) puede implicar un impacto visible en el tiempo de ejecución. Drupal está hecho de mucho archivos pequeños, lo que obliga a PHP a hacer E / S en el FS cada vez que carga uno de ellos (APC también ayuda mucho para eso).

Un DBMS mal configurado también puede ser un cuello de botella bastante feo, si está utilizando MySQL piense en hacer un ajuste fino. Si está en un alojamiento compartido, si no es específico de Drupal (o está listo), la pila DBMS y PHP probablemente esté mal configurada o no esté ajustada, lo que puede conducir a sitios realmente lentos.

No olvides activar todos los cachés. Si su sitio no está autenticado orientado al usuario, active el almacenamiento en caché agresivo de la página (es realmente sorprendente).

Cuantos más bloques tenga, más páginas completas serán lentas, los bloques del módulo de Vistas serán un cuello de botella al amanecer (dependiendo de los complementos de Vistas que use, el bloqueo de OG puede ser un verdadero dolor) si no restringe su visibilidad por página, o con código PHP personalizado (cualquier otro bloque también, siempre configure la visibilidad de su bloque manualmente, ayuda mucho al marco evitando que intente representar bloques vacíos).

Evite los módulos que usan hook_init (), hook_init () se está ejecutando en cada página, incluso si obtiene un 403 o un 404, lo que ralentiza todo (incluso ralentiza el tiempo de generación de estilo de imagen | caché | y errores 404 en los archivos serían amanecer lento solo para decirte que el archivo no existe).

Pierre
fuente
Hola, aquí cuando digo el tiempo de ejecución de la página me refiero al valor que muestra el módulo de desarrollo en la parte inferior de la página y no lo uso en el sentido general del ciclo de solicitud / respuesta de drupal que también incluye consultas SQL, etc. Mi pregunta es en contexto de usuario autenticado. Entonces, cuando devel informa el tiempo de ejecución de la página, ¿también incluye consultas sql?
Dipen
No estoy seguro de si el sistema de archivos sería un cuello de botella ya que estoy en un sistema de archivos linux de 15k RPM. Las consultas SQL tardan aproximadamente entre 300 y 700 ms, dependiendo de la página, pero el tiempo de ejecución de la página es de ~ 3 segundos (según el informe). No estoy seguro de qué más podría ser el problema.
Dipen
Oh, lo siento, leí mal tu publicación original. El valor de desarrollo se calcula desde el arranque hasta el apagado (el módulo de desarrollo tiene su propio controlador de apagado de PHP para hacer muchas cosas, incluido esto). No estoy seguro exactamente cuándo comienza y se detiene, pero casi todo el tiempo de construcción de la página de Drupal y los detalles comerciales están incluidos en el tiempo de ejecución de esa página. Sí, incluye todo (incluido el tiempo de consulta y la latencia de SQL) y su propia latencia (el registro de consultas de desarrollo también tiene un impacto en el rendimiento).
Pierre