Necesito borrar todas las entradas de caché de APC cuando implemente una nueva versión del sitio. APC.php tiene un botón para borrar todas las cachés de código de operación, pero no veo botones para borrar todas las entradas de usuario, o todas las entradas del sistema, o todas las entradas por directorio.
¿Es posible borrar todas las entradas de caché a través de la línea de comandos o de alguna otra manera?
php
performance
caching
apc
lo_fye
fuente
fuente
Respuestas:
Puedes usar la función PHP
apc_clear_cache
.Las llamadas
apc_clear_cache()
borrarán la memoria caché del sistema y las llamadasapc_clear_cache('user')
borrarán la memoria caché del usuario.fuente
php -r "apc_clear_cache();"
No creo que ninguna de estas respuestas realmente funcione para borrar el caché APC de la línea de comando. Como Frank Farmer comentó anteriormente, la CLI se ejecuta en un proceso separado de Apache.
Mi solución para borrar desde la línea de comandos fue escribir un script que copiara un script de borrado de APC en el
web
directorio y accede a él y luego lo elimina. El script está restringido a que se acceda desde el host local.apc_clear.php
Este es el archivo que el script copia en el directorio web, accede y elimina.
Script de limpieza de caché
Este script copia apc_clear.php en el directorio web, accede a él y luego lo elimina. Esto se basa en una tarea de Symfony. En la versión de Symfony, las llamadas se realizan a la forma de Symfony de copiar y desvincular, que manejan los errores. Es posible que desee agregar controles para que tengan éxito.
fuente
Sé que no es para todos, pero: ¿por qué no hacer un reinicio elegante de Apache?
Por ejemplo, en el caso de Centos / RedHat Linux:
Ubuntu:
fuente
Esto no se indica en la documentación, pero para borrar el caché del código de operación debe hacer:
EDITAR: Esto parece aplicarse solo a algunas versiones anteriores de APC.
No importa qué versión esté utilizando, no puede borrar el caché mod_php o fastcgi APC de un script php cli ya que el script cli se ejecutará desde un proceso diferente como mod_php o fastcgi. Debe llamar a apc_clear_cache () desde el proceso (o proceso hijo) para el que desea borrar el caché. Usar curl para ejecutar un script php simple es uno de esos enfoques.
fuente
Si desea borrar el caché de apc en el comando: (use sudo si lo necesita)
APCu
APC
fuente
Si está ejecutando en una pila NGINX / PHP-FPM, su mejor opción es probablemente volver a cargar php-fpm
service php-fpm reload
(o cualquiera que sea su comando de recarga en su sistema)fuente
Como se define en el documento de APC:
Para borrar el caché, ejecute:
fuente
Otra posibilidad para el uso de la línea de comandos, aún no mencionada, es usar curl.
Esto no resuelve su problema para todas las entradas de caché si está utilizando el script stock apc.php, pero podría llamar un script adaptado u otro que haya implementado.
Esto borra el caché del código de operación:
Cambie el parámetro OB a 3 para borrar la memoria caché del usuario:
Pon ambas líneas en un script y llámalo con $ PASSWORD en tu env.
fuente
Si desea monitorear los resultados a través de json, puede usar este tipo de script:
Como se menciona en otras respuestas, esta secuencia de comandos deberá llamarse a través de http o curl y deberá asegurarse si está expuesta en la raíz web de su aplicación. (por ip, token ...)
fuente
apc_clear_cache () solo funciona en el mismo php SAPI que desea borrar su caché. Si tiene PHP-FPM y desea borrar el caché de apc, debe hacerlo a través de uno de los scripts php, NO la línea de comando, porque los dos cachés están separados.
He escrito CacheTool , una herramienta de línea de comandos que resuelve exactamente este problema y con un comando puede borrar su caché PHP-FPM APC de la línea de comandos (se conecta a php-fpm por usted y ejecuta funciones apc)
También funciona para opcache.
Vea cómo funciona aquí: http://gordalina.github.io/cachetool/
fuente
El establo de APC tiene la opción de borrar un caché en su propia interfaz. Para borrar esas entradas, debe iniciar sesión en la interfaz de apc.
APC tiene la opción de configurar el nombre de usuario y la contraseña en el archivo apc.php.
fuente
php-apc
paquete instalado en su sistema.si ejecuta fpm en ubuntu, debe ejecutar el siguiente código (marcado en 12 y 14)
fuente
apc.ini
apc.stat = "1" obligará a APC a registrar (verificar) el script en cada solicitud para determinar si se ha modificado. Si se ha modificado, recompilará y almacenará en caché la nueva versión.
Si esta configuración está desactivada, APC no comprobará, lo que generalmente significa que para forzar a APC a volver a verificar los archivos, el servidor web tendrá que reiniciarse o el caché tendrá que borrarse manualmente. Tenga en cuenta que las configuraciones del servidor web FastCGI pueden no borrar el caché al reiniciar. En un servidor de producción donde los archivos de script rara vez cambian, las estadísticas deshabilitadas pueden lograr un aumento significativo del rendimiento.
fuente
La nueva interfaz de administración de APC tiene opciones para agregar / borrar caché de usuario y caché de código de operación. Una funcionalidad interesante es agregar / actualizar / eliminar directorios de la caché de código de operación.
Documentación de administración de APC
fuente
Una buena solución para mí era simplemente no usar el caché de usuario obsoleto después de la implementación.
Si agrega un prefijo a cada una de las claves, puede cambiar el prefijo al cambiar la estructura de datos de las entradas de caché. Esto lo ayudará a obtener el siguiente comportamiento en la implementación:
Esto es posible solo para el caché del usuario.
fuente
Crear archivo APC.php
Ejecútelo desde su navegador.
fuente
Mi solución para la compilación de Symfony con un montón de instancias en el mismo servidor:
Paso 1. Crea un disparador o algo para establecer un indicador de archivo (por ejemplo, comando Symfony) y luego crea
marker file
...Paso 2. En el archivo de índice al inicio, agregue el código de limpieza y elimine
marker file
.Paso 2. Ejecute la aplicación.
fuente
Tuvimos un problema con APC y enlaces simbólicos a enlaces simbólicos a archivos; parece ignorar los cambios en los archivos en sí. De alguna manera, el toque táctil en el archivo en sí ayudó. No puedo decir cuál es la diferencia entre modificar un archivo y tocarlo, pero de alguna manera era necesario ...
fuente