Pregunta

Recientemente hemos habilitado APC en nuestros servidores, y ocasionalmente cuando publicamos un nuevo código o cambios, descubrimos que los archivos de origen que se modificaron comienzan a generar errores que no se reflejan en el código, generalmente analizan los errores que describen un token que no existe. Lo hemos verificado ejecutando php -l en los archivos que los registros de errores dicen que están afectados. Por lo general, una nueva publicación soluciona el problema. Estamos utilizando PHP 5.2.0 y APC 3.01.9. Mi pregunta es, ¿alguien más ha experimentado este problema o alguien reconoce cuál es nuestro problema? Si es así, ¿cómo lo arreglaste o cómo pudimos arreglarlo?

Editar: Probablemente debería agregar algunos detalles sobre nuestro proceso de publicación. El contenido se está enviando a los servidores de producción a través de rsync desde un servidor de ensayo. Habilitamos apc.stat_ctime porque decía que esto ayuda a que las cosas funcionen mejor con rsync. apc.write_lock está activado de manera predeterminada y no lo hemos desactivado. Lo mismo ocurre con apc.file_update_protection .

¿Fue útil?

Solución

Parece que un archivo publicado parcialmente se está leyendo y guardando en caché como roto. apc.file_update_protection está diseñado para ayuda a detener esto.

en php.ini: apc.file_update_protection integer

  Configuración de

apc.file_update_protection   pone un retraso en el almacenamiento en caché a estrenar   archivos. El valor predeterminado es 2 segundos, que   significa que si la modificación   la marca de tiempo (mtime) en un archivo muestra que   es menos de 2 segundos cuando   se accede, no se almacenará en caché.   La desafortunada persona que accedió.   este archivo medio escrito todavía verá   rareza, pero al menos no lo hará   persistir.

Siguiendo la pregunta que se está editando: una razón por la que no veo este tipo de problemas es que envío una copia completamente nueva del sitio (con la exportación de SVN). Solo después de que se complete por completo, se vuelve visible para Apache / Mod_php (vea mi respuesta ¿Cómo empezar a implementar aplicaciones PHP desde un repositorio de subversion? )

La otra cosa que puede suceder, por supuesto, es que si está realizando una actualización, es posible que esté actualizando archivos que dependen de otros que aún no se han cargado. Rsync solo puede garantizar actualizaciones atómicas para archivos individuales, no toda la colección que se está modificando / cargando. Otra razón es que pienso subir el sitio en masa y solo ponerlo en uso.

Otros consejos

Parece que APC no se está formando previamente ni está obteniendo la información de estadísticas correcta del archivo. Puede verificarlo para asegurarse de que la configuración de APC apc. stat está configurado correctamente. Otra cosa que podría hacer es forzar la caché para que se borre con apc_clear_cache ( ) cuando publiques un nuevo código.

Nunca vi eso antes, incluso si soy un gran usuario de APC. ¿Quizás intente activar un script que vacíe el código de operación de APC cada vez que envíe un nuevo código en el servidor?

Cuando obtenga un archivo con un error de análisis, haga una copia de seguridad y vuelva a pintar. Tome ese mismo archivo que ahora funciona y haga una diferencia contra el archivo con el error de análisis.

ctime significa tiempo de creación. Deberá vaciar manualmente su caché completo cada vez que realice actualizaciones.

Puede hacer esto fácilmente, colocando el script apc.php en algún lugar de su servidor. Esta secuencia de comandos le proporciona estadísticas de la memoria caché y le permitirá eliminar la memoria caché por completo.

El script viene con APC.

Hopet su ayuda, Evert

Esto probablemente esté sucediendo porque hay una discrepancia entre tu código y las versiones en caché del código.

Por ejemplo, APC tiene una versión en caché de User.php, pero hizo cambios en User.php o en los datos que utiliza. La versión en caché todavía se está ejecutando incluso después de su implementación, porque aún no ha caducado.

Si borra las entradas de la caché de APC cuando implementa, este problema debería desaparecer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top