¿WAMP Stack/Silverstripe, alto TTFB pero ejecución rápida de PHP? ¿Dónde puedo buscar respuestas?

¿WAMP Stack/Silverstripe, alto TTFB pero ejecución rápida de PHP? ¿Dónde puedo buscar respuestas?

Mi servidor de producción es Windows Server 2012 R2, Apache 2.4, PHP 5.6 y MariaDB (no estoy seguro de la versión, probablemente sea irrelevante). Tengo un sitio personalizado que se ejecuta en Silverstripe 3.5.

Últimamente, estoy recibiendo TTFB ridículos con ciertas acciones, en particular al iniciar sesión (más de 30 segundos) o, a veces, al azar mientras navego por el backend. Curiosamente, esto no sucede en nuestro servidor de desarrollo, que está configurado de manera similar, y nuestro departamento de TI estará atento httpd.confpara php.iniver si hay alguna diferencia que pueda ser un problema.

Habilité la extensión Zend OpCache con la esperanza de que ayudara, pero no veo ninguna mejora significativa.

Instalé XDebug y activé la creación de perfiles al iniciar sesión (agregando un campo de formulario oculto llamado XDEBUG_PROFILE a través del inspector DOM), pero el resultado cuando se ve en WinCachegrind dice que la ejecución de PHP no tomó más de 5 segundos acumulativos, es decir, el tiempo total acumulado main.phpfue 4,x segundos. No parece haber un cuello de botella notable en la lógica del marco o en el acceso a la base de datos.

httpd.exeOcupa un sólido 14% de mi CPU durante la duración de la solicitud. Ver los registros con Powershell gci -Waitmuestra que la solicitud no se inicia access.loghasta después de que se envía la respuesta (no estoy seguro si es un comportamiento normal) y no aparecen errores.

No entiendo por qué Apache tarda tanto en procesar una solicitud que PHP afirma que solo tarda 4 segundos en realizar la lógica. Si bien se pueden apreciar las posibles soluciones, realmente me gustaría saber dónde más puedo buscar en términos de diagnóstico para descubrir qué está causando que Apache se ralentice de esta manera, por ejemplo, acceso a archivos, ejecución de seguimiento, etc. No tengo la menor idea de por dónde empezar a buscar.

Respuesta1

La base de datos fuenoel cuello de botella. Irónicamente, fue elcache- es unProblema conocido: Zend_Cache_Backend_Filelos cachés basados ​​en - son terriblemente lentos si el sitio tiene muchos datos, plantillas e imágenes para almacenar en caché.. Efectivamente, mi carpeta silverstripe-cache en el servidor tenía más de 5000 archivos.

Agregar la siguiente línea para ./mysite/_config.phpdeshabilitar el almacenamiento en caché resultó en mejoras inmediatas y abrumadoras (¡TTFB de 35 segundos al iniciar sesión a menos de 0,5 segundos!):

SS_Cache::set_cache_lifetime('default', -1, 100);

Sin embargo, Esta es una solución temporal. Buscaremos implementar una solución más permanente y con mejores prácticas para manejar el almacenamiento en caché, como usar un disco ram junto con el backend del sistema de archivos o aprovechar un backend que use grupos de memoria como XCache o Memcached, además de trabajar para pasar a Silverstripe 4.x que se decanta Zend_Cachea favor de symfony/cache.

Pero dado que a mi oficina le encanta dejar que la burocracia se interponga en todo... podría pasar un poco antes de que eso suceda.

información relacionada