2009-07-26 24 views
5

Estoy trabajando en una granja de servidores web de alto tráfico que sirve código PHP dinámico que incluye alrededor de 100 archivos en la mayoría de las solicitudes. La memoria caché del código de operación de APC está habilitada, include_once_override está habilitada y he asignado 64 MB de RAM a la memoria caché, sin embargo, cuando utilizo un proceso de Apache, todavía lo veo abierto() ing y stat() ing todo esto incluye para cada solicitud que debe ser sacado de la memoria caché Puedo ver en las estadísticas de caché que el caché está siendo poblado y utilizado con un 100% de hitrate. ¿Alguien puede ofrecer alguna idea?APC habilitado pero Apache sigue abriendo archivos?

+0

Will, ¿ha evaluado su servidor con o sin include_once_override? – hobodave

+0

Gracias! Sí, hice referencia con y sin y no vi ninguna diferencia notable. Ahora estoy viendo mucho menos stat() después de implementar rutas absolutas, pero aún veo un acceso() para cada archivo que estoy incluyendo, incluso con apc.stat = 0. ¿Es esto normal? ¿Por qué hay que acceder a los archivos? – Will

+0

¿Estás seguro de que no estás viendo solo la inclusión inicial del archivo? Qué versión estás usando? APC ha tenido problemas históricamente con include_once_override. Además, edite su pregunta de origen con respuestas, en lugar de usar las respuestas. – hobodave

Respuesta

7

Will, asegúrese de estar utilizando nombres completos para cada inclusión en su aplicación. Por la documentación APC:

apc.stat número entero

Tenga cuidado de cambiar esta configuración. Esto está predeterminado, obligando a APC a verificar (verificar) el script en cada solicitud para determinar si ha sido modificado. Si se ha modificado, volverá a compilar y almacenar en caché la nueva versión. Si esta configuración está desactivada, APC no comprobará, lo que generalmente significa que para obligar a APC a volver a verificar los archivos, el servidor web deberá reiniciarse o la memoria caché tendrá que borrarse manualmente. Tenga en cuenta que las configuraciones del servidor web FastCGI pueden no borrar la memoria caché al reiniciar. En un servidor de producción donde los archivos de script rara vez cambian, se puede lograr un impulso significativo en el rendimiento mediante estadísticas desactivadas.

Para archivos incluidos/requeridos, esta opción también se aplica, pero tenga en cuenta que para la ruta relativa incluye (cualquier ruta que no comience con/en Unix) APC debe verificar para identificar el archivo de manera única. Si utiliza la ruta absoluta, incluye que APC puede omitir la estadística y usar esa ruta absoluta como identificador único para el archivo.

Una buena regla de oro para PHP es definir una constante que contiene la ruta completa a su proyecto, así:

// Assumes __FILE__ is in the root of your project 
define('PATH_PROJECT', realpath(dirname(__FILE__))); 

continuación, utilizar su incluye de este modo:

include_once PATH_PROJECT . '/some/dir/file.php'; 

Por lo tanto, todavía tiene la conveniencia de las rutas relativas, pero realmente está utilizando rutas completas.

Cuestiones relacionadas