2011-02-18 24 views
5

Cuando la memoria caché APC está llena, cuelga Apache. Apache responde a las solicitudes, sin embargo espera para que la memoria caché de APC libere algunos recursos, pero esto nunca sucederá.Cómo evitar que Apache se cuelgue cuando la memoria caché PHP APC se llena por completo?

Ejecuto cada 10 minutos el trabajo CRON con mi propio script de expurgación pequeño, que elimina las entradas caducadas de APC. De acuerdo, podría agregar más memoria a APC y/o podría ejecutar el script de expurgación más a menudo. Pero esa no es una solución real, estoy buscando una nueva forma de lidiar con el problema.

Respuesta

1

No es realmente la solución final, pero he escrito PHP APC expunge script pequeño que había propuesto en mi pregunta. CRON ejecuta este script cada 10 minutos y elimina manualmente los elementos caducados. No es una solución perfecta, pero al menos ayuda mucho.

Todavía estoy buscando una solución final.

0

Puede intentar agregar una línea a un script que se ejecuta a menudo para verificar si el caché está casi lleno y, si es así, trate con él. Un ejemplo de dicho script podría ser un script que establezca la conexión a una base de datos.

+0

Bueno, la ejecución de dicha secuencia de comandos en cada llamada de script ralentizará un poco el tiempo de respuesta de cada script. Y la mayoría de las veces nunca es necesario, porque el uso de la memoria caché está en un nivel mínimo. Así que simplemente iría con el trabajo cron ejecutado más a menudo, digamos 5 minutos. Pero aún preferiría un método más elegante, como Apache, reconociendo que algo está mal y reiniciándose a sí mismo ... Pero no he encontrado nada sobre esta posible función ... – Frodik

1

Me parece que establecer un ttl cambia el comportamiento de APC cuando el caché está lleno. De forma predeterminada, si ttl es 0, APC tiene que vaciar el caché cuando se llena. Del manual:

En el caso de una caché de quedarse sin memoria disponible, la memoria caché será completamente borrado si TTL es igual a 0. De lo contrario , si el TTL es mayor que 0, APC intento de eliminar entradas caducadas.

+0

Bueno, pero esto no ocurre del todo. Cuando el caché de APC está completamente lleno, simplemente se cuelga y también lo hace Apache. Acepta nuevas conexiones pero no se completan. Hay muchos elementos caducados, pero APC no los borra (lo que lógicamente debería ser). Y no importa si ttl es 0 o mayor. – Frodik

Cuestiones relacionadas