Tiempo de carga del archivo PHP, ¿quizás relacionado con NFS?

Tiempo de carga del archivo PHP, ¿quizás relacionado con NFS?

El problema

Estoy intentando diagnosticar un problema de rendimiento en un sitio web Drupal que estoy desarrollando. Por la mañana, cuando el sitio no ha visto tráfico (ni siquiera una ejecución cron) durante más de 8 horas, la página de inicio tarda alrededor de 3,5 segundos en cargarse. Recargar la página tarda unos 250 ms.

Este es un servidor web de desarrollo, con una versión bastante antigua de PHP instalada (5.3.3).Todos los archivos están montados estáticamente sobre NFS.(que creo que es la causa principal, más sobre eso a continuación).

Para ayudar a diagnosticar, instaléXHProfen este servidor de desarrollo y habilitó un módulo Drupal que carga la página de perfiles y muestra los datos de perfiles en una tabla que se puede ordenar fácilmente. Para aquellos que no están familiarizados con XHProf, proporciona datos sobre cada función llamada y aspectos como el tiempo total invertido, el uso de memoria y las llamadas para esa función.

Mis hallazgos

En el golpe "lento" inicial, la función PHP file_existstomó1400msde 82 convocatorias, lo que representa aproximadamente el 43% del tiempo total de ejecución. En la siguiente carga de página, file_existsse volvió a llamar a la misma función 82 veces, pero esta vez se redujo drásticamente a solo3msrepresentando sólo el 1% del tiempo total de ejecución.

Además, miré el archivo que tardó más en cargar PHP en la memoria (que es lo que creo que load::significa el prefijo en el nombre de una función). Este archivo de plantilla PHP tomó un enorme esfuerzo42mspara cargar la primera vez, y sólo3msen la recarga posterior!

lo que sospecho

Para mí está claro que hay algún tipo de almacenamiento en caché en alguna parte, pero todavía no sé dónde. Los documentos PHP paraEl archivo existemencione que la salida de esta función se almacena en caché. Entonces descubrí que puedocontrolar el tamaño de este cachéy probablemente debería aumentarse del valor predeterminado de 16k a algo más apropiado para Drupal (que carga toneladas de archivos relativos).

Sin embargo, aunque creo que eso reduciría la cantidad de tiempo invertido en file_exists, no estoy seguro de que eso afecte el tiempo que realmente toma PHP.cargandoel archivo (lo que load::mencioné anteriormente) y aumentar este valor parece simplemente ocultar problemas de rendimiento subyacentes con el sistema de archivos.

Preguntas

  1. ¿Hay algún veterano de XHProf o PHP que pueda confirmar si el aumento de PHP realpath_cachetuvo algún impacto en el tiempo informado load::desde XHProf?
  2. ¿Qué mecanismos de almacenamiento en caché subyacentes debo tener en cuenta en Linux que podrían tener un impacto?
  3. Igual que el anterior, pero ¿para NFS?

información relacionada