php - imagenes - meta limpiar cache
¿Cómo borrar las entradas de caché de APC? (18)
Como se define en el documento de APC:
Para borrar la caché, ejecuta:
php -r ''function_exists("apc_clear_cache") ? apc_clear_cache() : null;''
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 todos los cachés de opcode, 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 comando, o de alguna otra manera?
Crear archivo APC.php
foreach(array(''user'',''opcode'','''') as $v ){
apc_clear_cache($v);
}
Ejecútelo desde su navegador.
El establo de APC está teniendo la opción de borrar un caché en su propia interfaz. Para borrar esas entradas debe iniciar sesión en la interfaz de la APC.
APC tiene la opción de establecer el nombre de usuario y la contraseña en el archivo apc.php.
Esto no se indica en la documentación, pero para borrar el caché del código de operación debe hacer lo siguiente:
apc_clear_cache(''opcode'');
EDITAR: Esto parece aplicarse solo a algunas versiones anteriores de APC.
Independientemente de la versión que utilice, no puede borrar mod_php o fastcgi de la memoria caché de APC desde una secuencia de comandos php cli, ya que la secuencia de comandos cli se ejecutará desde un proceso diferente como mod_php o fastcgi. Debe llamar a apc_clear_cache () desde dentro del proceso (o proceso hijo) para el que desea borrar el caché. Usar curl para ejecutar un simple script php es uno de esos enfoques.
La nueva interfaz de administración de APC tiene opciones para agregar / borrar caché de usuario y caché de opcode. Una funcionalidad interesante es agregar / actualizar / eliminar directorios de opCode Cache
Mi trabajo para Symfony build teniendo un montón de instancias en el mismo servidor:
Paso 1. Crea un disparador o algo para configurar un indicador de archivo (por ejemplo, el comando Symfony) y luego crea un marker file
.
file_put_contents(''clearAPCU'',''yes sir i can buggy'')
Paso 2. En el archivo de índice al inicio, agregue el código de borrado y elimine el marker file
.
if(file_exists(''clearAPCU'')){
apcu_clear_cache();
unlink(''clearAPCU'');
}
Paso 2. Ejecuta la aplicación.
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 de la línea de comandos fue escribir un script que copie un script de compensación de APC en el directorio web
y acceda a él y luego lo elimine. La secuencia de comandos está restringida para acceder desde el host local.
apc_clear.php
Este es el archivo que la secuencia de comandos copia al directorio web, accede y elimina.
<?php if (in_array(@$_SERVER[''REMOTE_ADDR''], array(''127.0.0.1'', ''::1''))) { apc_clear_cache(); apc_clear_cache(''user''); apc_clear_cache(''opcode''); echo json_encode(array(''success'' => true)); } else { die(''SUPER TOP SECRET''); }
Script de borrado de caché
Este script copia apc_clear.php al directorio web, accede a él y luego lo borra. Esto se basa en una tarea de Symfony. En la versión de Symfony, las llamadas se realizan a la forma Symfony de copiar y desvincular, que maneja los errores. Es posible que desee agregar controles que tengan éxito.
copy($apcPaths[''data''], $apcPaths[''web'']); //''data'' is a non web accessable directory $url = ''http://localhost/apc_clear.php''; //use domain name as necessary $result = json_decode(file_get_contents($url)); if (isset($result[''success'']) && $result[''success'']) { //handle success } else { //handle failure } unlink($apcPaths[''web'']);
Otra posibilidad para el uso de línea de comandos, aún no mencionado, 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 a un script adaptado u otro que haya implementado.
Esto borra la caché del código de operación:
curl --user apc:$PASSWORD "http://www.example.com/apc.php?CC=1&OB=1&`date +%s`"
Cambie el parámetro OB a 3 para borrar la memoria caché del usuario:
curl --user apc:$PASSWORD "http://www.example.com/apc.php?CC=1&OB=3&`date +%s`"
Coloque ambas líneas en un guión y llámelo con $ PASSWORD en su env.
Sé que no es para todos, pero ¿por qué no hacer un elegante reinicio de Apache?
Por ejemplo, en el caso de Centos / RedHat Linux:
sudo service httpd graceful
Ubuntu:
sudo service apache2 graceful
Si desea borrar el caché de la APC en el comando: (use sudo si lo necesita)
php -r "apc_clear_cache(); apc_clear_cache(''user''); apc_clear_cache(''opcode'');"
Si desea supervisar los resultados a través de json, puede utilizar este tipo de secuencia de comandos:
<?php
$result1 = apc_clear_cache();
$result2 = apc_clear_cache(''user'');
$result3 = apc_clear_cache(''opcode'');
$infos = apc_cache_info();
$infos[''apc_clear_cache''] = $result1;
$infos["apc_clear_cache(''user'')"] = $result2;
$infos["apc_clear_cache(''opcode'')"] = $result3;
$infos["success"] = $result1 && $result2 && $result3;
header(''Content-type: application/json'');
echo json_encode($infos);
Como se menciona en otras respuestas, este script deberá llamarse mediante http o curl y deberá estar protegido si está expuesto en la raíz web de su aplicación. (por ip, token ...)
Si está ejecutando una pila NGINX / PHP-FPM, su mejor opción es probablemente solo volver a cargar php-fpm
service php-fpm reload
(o cualquiera que sea su comando de recarga en su sistema)
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, tocar el archivo ayudó. No puedo decir cuál es la diferencia entre modificar un archivo y tocarlo, pero de alguna manera era necesario ...
Una buena solución para mí fue simplemente no usar la memoria caché de usuario obsoleta más después de la implementación.
Si agrega un prefijo a cada una de sus claves, puede cambiar el prefijo al cambiar la estructura de datos de las entradas de la memoria caché. Esto lo ayudará a obtener el siguiente comportamiento en la implementación:
- No utilice entradas de caché desactualizadas después del despliegue de solo las estructuras actualizadas
- No limpie todo el caché en la implementación para no ralentizar su página
- Algunas entradas antiguas en caché se pueden reutilizar después de revertir su implementación (si las entradas ya no se eliminaron automáticamente)
- APC eliminará las entradas antiguas de caché después de caducar O en el espacio de caché faltante
Esto es posible solo para el caché del usuario.
apc.ini
apc.stat = "1" obligará a APC a verificar (verificar) el script en cada solicitud para determinar si ha sido modificado. Si se ha modificado, volverá a compilar y almacenar en caché la nueva versión.
Si esta configuración está desactivada, APC no comprobará, lo que generalmente significa que para obligar a APC a volver a verificar los archivos, el servidor web deberá reiniciarse o la memoria caché tendrá que borrarse manualmente. Tenga en cuenta que las configuraciones del servidor web FastCGI pueden no borrar la memoria caché al reiniciar. En un servidor de producción donde los archivos de script rara vez cambian, se puede lograr un impulso significativo en el rendimiento mediante estadísticas desactivadas.
apc_clear_cache () solo funciona en el mismo SAPI php que quiere que elimine el caché. Si tiene PHP-FPM y desea borrar el caché de la APC, debe hacerlo a través de uno de los scripts php, NO de 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 puedes borrar tu caché APC de PHP-FPM desde la línea de comandos (se conecta a php-fpm y ejecuta las funciones de la APC)
También funciona para opcache.
Vea cómo funciona aquí: CacheTool
si ejecuta fpm bajo ubuntu, necesita ejecutar el código a continuación (marcada en 12 y 14)
service php5-fpm reload
Puede usar la función PHP apc_clear_cache
.
Llamar a apc_clear_cache()
borrará la memoria caché del sistema y la llamada a apc_clear_cache(''user'')
borrará la memoria caché del usuario.