2009-09-30 20 views
13

He leído acerca de APC que acelera múltiples sitios de archivos php. Así que tengo este proyecto particular en PHP con muchos archivos y descubro que require_once y analizar solo las definiciones de clase (sin ejecutarlas) lleva más tiempo.¿Cómo hacer que funcione APC (PHP Cache)?

Así que he instalado APC en mi servidor CentOS 5. Me moví apc.php a mi servidor web y se muestra

Hits: 1 (50.0%) 
Misses: 1 (50.0%) 

Cached Files 1 (281.1 KBytes) 

Y puedo ir a la página web y cambiar subpáginas y así sucesivamente, y apc.php sigue mostrando sólo un archivo almacenado en caché ??

Y en phpinfo() muestra que:

APC activado Soporte

no sé qué hacer. Está trabajando APC (como phpinfo() sais) o no? Solo un archivo en caché no es mucho después de navegar algunas páginas en mi sitio web.

¿Y más aún cómo diagnosticar errores y asegurarse de que APC funciona? He navegado por

apc.mmap_file_mask /tmp/apc.QnLqNf /tmp/apc.QnLqNf

directorio/tmp, pero no tengo ningún archivo de APC allí como se afirma en phpinfo debería ocurrir.

Por favor, ayúdenme a verificar si APC está funcionando y, en caso negativo, lo que puede ser un problema.

+0

¿Cuál es su configuración APC? En concreto comprobar: apc.include_once_override = 1 que fija un problema con APC y el estándar incluyen código/reuire en php – Neel

+0

¿Qué clase de PHP-SAPI y el servidor está usando? Apache + mod_php, Apache + mod_fcgi/mod_fastcgi o algunos Lighttpd + fastcgi? –

+0

Estoy teniendo el mismo problema. Apache + mod_php y apc.php informan solo 1 archivo en caché (que sospecho que es el archivo apc.php). ¿Ha habido alguna revelación de esto todavía? –

Respuesta

8

APC se puede utilizar de dos maneras:

  1. A modo de caché de código de operación. Tiene soporte habilitado para que esto funcione; y
  2. Como caché general. Tienes que usar explícitamente el API para esto.

(1) es la principal ventaja. Reduce el tiempo para la ejecución de scripts al almacenar los resultados del código de operación de los scripts de "compilación".

cuanto a que funcione, desde la installation instructions:

Nota: En Windows, APC necesita una ruta temporal de existir y ser escribible por el servidor web . Comprueba las variables de entorno TMP, TEMP, USERPROFILE en y luego intenta el directorio WINDOWS si ninguno de ellos es establecido.

Así que no debería necesitarlo (o ver ninguna actividad) en CentOS.

Dicho esto, require/include es mejor que require_once/include_once/autoload pero solo debería importar si lo hace con cientos de archivos.

+5

Ok, lo entiendo. ¿Pero hay alguna manera de probar si realmente funciona? Como mencioné, APC.php muestra solo un golpe y falla y parece que no funciona. –

+2

Lo segundo. ¿Hay alguna evidencia (aparte del aumento de velocidad) que pueda indicarle que realmente está funcionando? –

+2

Estoy en el mismo dilema, apc.php muestra solo un archivo en caché que es apc.php. Estoy confundido :( – Kumar

2

¿Su sitio es básicamente un archivo PHP que luego incluye o requiere otros archivos? Eso puede registrarse como un solo archivo.Además, hasta donde yo sé, la lógica de incluir/requerir condicional puede no almacenar en caché como se esperaba, ¡aunque eso puede ser solo rumores!

+0

No tengo condicionales. Tengo 4 archivos que incluyen 3 archivos de biblioteca. Me gustaría asegurarme de que APC funcione, porque APC.PHP no lo identifica. –

1

¿Revisó los archivos de registro de thr? Eche un vistazo a /var/log/apache2/error.log o como sea que aparezca bajo su distribución.

Además, trato de hacer 2-3 archivos php, punto thebrowser en ellos, y luego comprobar la cantidad de archivos PHP se almacenan en caché por el caché de APC ..

No está seguro acerca de APC, pero recomiendo eAccelerator (http://eaccelerator.net/). Lo probé hace un tiempo y realmente marcó la diferencia.

0

http://www.litespeedtech.com/support/forum/showthread.php?t=3761

"APC no funciona bien con PHP suEXEC ya que cada proceso de PHP usará su propia memoria caché, no se comparte

Usted debe tratar eAccelerator +/dev/shm si necesita usar PHP suEXEC. "

también tiene el mismo problema, parece PHP suEXEC + APC es un problema

1

En la rama 3.1.5dev APC, a new option was introduced lo que le permite desactivar el caché de código de operación. Parece estar desactivado de manera predeterminada.

Trate de añadir esto a su archivo de configuración de APC:

apc.enable_opcode_cache=1