2012-07-28 22 views
6

I have had this problem before on WAMP Server and PHP 5.3, y ahora lo enfrenta en Linux con PHP 5.4.APC no acelera PHP 5.4

Básicamente, APC habilitado o deshabilitado no hace diferencia en el rendimiento, a pesar de lo que dicen las estadísticas en apc.php.

Aquí es un script de prueba de muestra, que incluye más de 30 archivos Doctrina de PHP, y los tiempos que:

$t = microtime(true); 
include 'Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php'; 
printf('%.3f s', microtime(true)-$t); 
  • Resultado en Windows (Zend Server CE, PHP 5.4): 0.001 s
  • Resultado
  • en Linux (PHP 5.4 & APC 3.1.11): 0.106 s

Nota: incluso si no se muestra en la secuencia de comandos anterior, en realidad estoy usando una ruta completa al archivo, y no confío en include_path.

El resultado me sale en Linux es el mismo si es apc.enabled0 o 1, lo que parece que el almacenamiento en caché de código de operación no está funcionando.

Sin embargo, apc.php dice:

apc.php

Paquetes (de la remi repository, CentOS 6.3):

php-5.4.5-1.el6.remi.x86_64 
php-pecl-apc-3.1.11-1.el6.remi.1.x86_64 

APC configuración:

apc.enabled=1 
apc.shm_segments=1 
apc.shm_size=64M 
apc.num_files_hint=1024 
apc.user_entries_hint=4096 
apc.ttl=7200 
apc.use_request_time=1 
apc.user_ttl=7200 
apc.gc_ttl=3600 
apc.cache_by_default=1 
apc.file_update_protection=2 
apc.enable_cli=1 
apc.max_file_size=1M 
apc.stat=1 
apc.stat_ctime=0 
apc.canonicalize=0 
apc.write_lock=1 

última cosa, , PHP si que comunica a APC como habilitado:

var_dump(extension_loaded('apc')); // (bool) true 
+0

¡Estoy teniendo el mismo problema! Me encantaría que alguien pudiera ayudar. –

+2

¿Una buena pregunta PHP sobre Stack Overflow? TODAS LAS UPVOTES! – cmbuckley

Respuesta

3

me olvidó mencionar una parte importante del problema: el servidor Web se ejecuta en una máquina virtual Linux bajo Windows 7, y es la lectura de los archivos de una carpeta compartida en el host.

Me di cuenta de que lo que ralentiza APC, es tener que stat los archivos en esta carpeta compartida.

Copiar los archivos a la máquina virtual soluciona el problema.

Sin embargo, estoy sorprendido de que apc.stat=0 no soluciona el problema solo, hubiera esperado stat los archivos solo una vez, y leeré todo incondicionalmente de la memoria caché posterior.

+1

Esto podría explicar el comportamiento de apc.stat = 0 (http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat): para los archivos incluidos/requeridos, esta opción también se aplica, pero tenga en cuenta que para la ruta relativa incluye (cualquier ruta que no se inicie con/en Unix) APC tiene que verificar para identificar de manera única el archivo. Si utiliza la ruta absoluta, incluye que APC puede omitir la estadística y usar esa ruta absoluta como identificador único para el archivo. –

+0

De hecho, aunque estoy seguro de que mis caminos son absolutos en este momento, no puedo estar tan seguro de que siempre hayan estado en el pasado ... Esta pregunta se está haciendo un poco vieja, tendría que hacer un poco de frescura ¡pruebas! – Benjamin

Cuestiones relacionadas