2009-02-28 13 views
20

Actualmente estoy ejecutando varias copias de PHP/FastCGI, con APC habilitado (en Apache + mod_fastcgi, si eso importa). ¿Puedo compartir caché entre los procesos? ¿Cómo puedo verificar si ya se comparte? (Creo que el ajuste ini apc.mmap_file_mask podría estar involucrado, pero no sé cómo usarlo.)¿Cómo compartir memoria caché APC entre varios procesos PHP cuando se ejecuta bajo FastCGI?

(Una de las razones por las que creo que es no compartieron en este momento es que el apc.mmap_file_mask, según lo informado por la interfaz web apc.php gira entre 3 valores diferentes a medida que vuelvo a cargar.)

Respuesta

20

APC does no actualmente comparte su caché entre varios trabajadores de php-cgi que se ejecutan bajo fastcgi o fcgid. Ver this feature request para más detalles: "este comportamiento es el esperado a partir de ahora".

Una solución alternativa es permitir que PHP administre sus propios trabajadores. Puede hacer esto usando la variable de entorno PHP_FCGI_CHILDREN en su script de contenedor (hay muchos ejemplos en toda la web para eso). También debe evitar que fastcgi/fcgid genere más de un proceso de PHP si desea utilizar este método.

La desventaja de PHP_FCGI_CHILDREN es que su gestión de los trabajadores no es tan buena como la proporcionada por fcgid/fastcgi.

Entonces, ahí estamos. APC en un entorno fcgid/fastcgi significa dar a cada trabajador PHP su propio caché o deshabilitar el proceso de generación de fcgid/fastcgi a favor de la administración integrada de PHP. Esperemos que esto cambie en el futuro.

+4

Según otro comentario, para configurar mod_fastcgi para que inicie solo una instancia de php-cgi (de modo que php-cgi maneje a los trabajadores y, por lo tanto, comparta caché), está con "FastCgiConfig -maxClassProcesses 1" en el httpd.conf. Ver también http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html. – mjs

+0

El error # 57825 ha sido cerrado. ¿PHP lo soporta ahora? – mgutt

+4

FPM lo admite y ha dejado de usar la mayoría de las soluciones basadas en fcgid/fastcgi. APC todavía tiene problemas ocasionales con los bloqueos (contención, interbloqueos) cuando los comparte entre los trabajadores de un grupo grande, pero funciona bastante bien (y * muy * bien para el almacenamiento en caché de archivos/códigos operativos), y FPM tiene funciones de seguridad incorporadas (segfault detección) para cuando APC hace cosas.(Aunque, no ayuda a los puntos muertos). –

0

La memoria caché debe compartirse entre procesos. Debería ver el mismo valor para el archivo mmap entre las invocaciones phpinfo() y apc.php. Me funciona con la configuración de configuración de APC predeterminada sugerida:

extension="apc.so" 
apc.enabled=1 
apc.shm_segments=1 
apc.shm_size=128 
apc.ttl=7200 
apc.user_ttl=7200 
apc.num_files_hint=1024 
apc.mmap_file_mask="/tmp/apc.XXXXXX" 
apc.enable_cli=1 

Es posible que desee publicar su configuración. He visto advertencias de que mmap_file_mask debe ser exactamente uno de los valores que permiten. Entonces, si te estás perdiendo una de esas X, no hay forma de saber qué obtendrás.

Quizás se trate de su configuración fastcgi + apache.

+0

Francamente, no creo que realmente funcione para usted. Si actualiza las páginas, generalmente será atendido por el mismo trabajador de php-cgi por cualquier motivo (¿KeepAlive quizás?), Especialmente (y no estoy diciendo que este sea el caso) si su servidor no está en un montón de carga. –

10

Si bien no es perfecto, el método que Domster sugirió es el mejor. He estado haciendo esto por un tiempo corto en algunos sitios de bajo volumen sin errores. Escribí una explicación detallada en how to set up mod_fastcgi with a shared opcode cache anoche.

Me pareció muy importante usar mod_fastcgi en lugar del más reciente mod_fcgid porque mod_fcgid solo enviará una solicitud a la vez al proceso de PHP, independientemente de cuántos hijos PHP haya generado a través de PHP_FCGI_CHILDREN.

+0

le gustó su artículo - ¡lo encontró arriba de este hilo en Google! – benlumley

+0

¡Gran respuesta! ¡También me ayudó a resolver mi problema de concurrencia con 'mod_fcgid'! – vdboor

+0

¡gran artículo! ver también http://whorka.github.com/blog/2012/02/08/apache-mod_fastcgi-suexec-php-apc-rhel.html –

Cuestiones relacionadas