Je dois effacer toutes les entrées du cache APC lorsque je déploie une nouvelle version du site. APC.php a un bouton pour effacer tous les caches d'opcode, mais je ne vois pas de boutons pour effacer toutes les entrées utilisateur, ou toutes les entrées système, ou toutes les entrées par répertoire.
Est-il possible d'effacer toutes les entrées du cache via la ligne de commande, ou d'une autre manière?
php
performance
caching
apc
lo_fye
la source
la source
Réponses:
Vous pouvez utiliser la fonction PHP
apc_clear_cache
.L'appel
apc_clear_cache()
effacera le cache système et l'appelapc_clear_cache('user')
effacera le cache utilisateur.la source
php -r "apc_clear_cache();"
Je ne crois pas qu'aucune de ces réponses ne fonctionne réellement pour effacer le cache APC de la ligne de commande. Comme Frank Farmer l'a commenté ci-dessus, l'interface de ligne de commande s'exécute dans un processus distinct d'Apache.
Ma solution pour l'effacement de la ligne de commande était d'écrire un script qui copie un script d'effacement APC dans le
web
répertoire et y accède, puis le supprime. L'accès au script est limité à partir de l'hôte local.apc_clear.php
Il s'agit du fichier que le script copie dans le répertoire Web, accède et supprime.
Script d'effacement du cache
Ce script copie apc_clear.php dans le répertoire Web, y accède, puis le supprime. Ceci est basé sur une tâche Symfony. Dans la version Symfony, les appels sont effectués vers la forme Symfony de copie et de dissociation, qui gère les erreurs. Vous souhaiterez peut-être ajouter des vérifications de leur réussite.
la source
Je sais que ce n'est pas pour tout le monde mais: pourquoi ne pas redémarrer Apache en douceur?
Par exemple dans le cas de Centos / RedHat Linux:
Ubuntu:
la source
Ce n'est pas indiqué dans la documentation, mais pour vider le cache de l'opcode, vous devez faire:
EDIT: Cela ne semble s'appliquer qu'à certaines anciennes versions d'APC.
Quelle que soit la version que vous utilisez, vous ne pouvez pas effacer le cache APC mod_php ou fastcgi d'un script cli php car le script cli s'exécutera à partir d'un processus différent comme mod_php ou fastcgi. Vous devez appeler apc_clear_cache () depuis le processus (ou processus enfant) pour lequel vous souhaitez vider le cache. Utiliser curl pour exécuter un simple script PHP est une de ces approches.
la source
Si vous souhaitez effacer le cache apc dans la commande: (utilisez sudo si vous en avez besoin)
APCu
APC
la source
Si vous utilisez une pile NGINX / PHP-FPM, votre meilleur pari est probablement de simplement recharger php-fpm
service php-fpm reload
(ou quelle que soit votre commande de rechargement sur votre système)la source
Tel que défini dans le document APC:
Pour vider le cache, exécutez:
la source
Une autre possibilité d'utilisation de la ligne de commande, non encore mentionnée, est d'utiliser curl.
Cela ne résout pas votre problème pour toutes les entrées de cache si vous utilisez le script stock apc.php, mais cela pourrait appeler un script adapté ou un autre que vous avez mis en place.
Cela efface le cache de l'opcode:
Modifiez le paramètre OB sur 3 pour vider le cache utilisateur:
Mettez les deux lignes dans un script et appelez-le avec $ PASSWORD dans votre env.
la source
Si vous souhaitez surveiller les résultats via json, vous pouvez utiliser ce type de script:
Comme mentionné dans d'autres réponses, ce script devra être appelé via http ou curl et vous devrez être sécurisé s'il est exposé dans la racine web de votre application. (par ip, jeton ...)
la source
apc_clear_cache () ne fonctionne que sur le même SAPI php que vous souhaitez effacer le cache. Si vous avez PHP-FPM et que vous souhaitez effacer le cache apc, vous devez le faire via l'un des scripts php, PAS la ligne de commande, car les deux caches sont séparés.
J'ai écrit CacheTool , un outil de ligne de commande qui résout exactement ce problème et avec une commande, vous pouvez effacer votre cache PHP-FPM APC à partir de la ligne de commande (il se connecte à php-fpm pour vous et exécute les fonctions apc)
Cela fonctionne également pour opcache.
Voyez comment cela fonctionne ici: http://gordalina.github.io/cachetool/
la source
L'écurie d'APC a la possibilité de vider un cache dans son interface elle-même. Pour effacer ces entrées, vous devez vous connecter à l'interface apc.
APC a la possibilité de définir le nom d'utilisateur et le mot de passe dans le fichier apc.php.
la source
php-apc
package est installé dans votre système.si vous exécutez fpm sous ubuntu, vous devez exécuter le code ci-dessous (vérifié sur 12 et 14)
la source
apc.ini
apc.stat = "1" forcera APC à statuer (vérifier) le script à chaque requête pour déterminer s'il a été modifié. S'il a été modifié, il recompilera et mettra en cache la nouvelle version.
Si ce paramètre est désactivé, APC ne vérifiera pas, ce qui signifie généralement que pour forcer APC à revérifier les fichiers, le serveur Web devra être redémarré ou le cache devra être effacé manuellement. Notez que les configurations de serveur Web FastCGI peuvent ne pas vider le cache au redémarrage. Sur un serveur de production où les fichiers de script changent rarement, une amélioration significative des performances peut être obtenue en désactivant les statistiques.
la source
La nouvelle interface d'administration APC a des options pour ajouter / effacer le cache utilisateur et le cache opcode, une fonctionnalité intéressante consiste à ajouter / actualiser / supprimer des répertoires à partir du cache opCode
Documentation d'administration APC
la source
Une bonne solution pour moi était simplement de ne plus utiliser le cache utilisateur obsolète après le déploiement.
Si vous ajoutez un préfixe à chacune de vos clés, vous pouvez modifier le préfixe en modifiant la structure de données des entrées de cache. Cela vous aidera à obtenir le comportement suivant lors du déploiement:
Cela n'est possible que pour le cache utilisateur.
la source
Créer un fichier APC.php
Exécutez-le depuis votre navigateur.
la source
Ma solution de contournement pour la version Symfony ayant le pillage des instances sur le même serveur:
Étape 1. Créez un déclencheur ou quelque chose pour définir un indicateur de fichier (par exemple, la commande Symfony), puis créez
marker file
.Étape 2. Sur le fichier d'index au début, ajoutez le code d'effacement et supprimez-le
marker file
.Étape 2. Exécutez l'application.
la source
Nous avons eu un problème avec APC et des liens symboliques vers des liens symboliques vers des fichiers - il semble ignorer les changements dans les fichiers eux-mêmes. En quelque sorte, effectuer un toucher sur le fichier lui-même a aidé. Je ne peux pas dire quelle est la différence entre modifier un fichier et le toucher, mais en quelque sorte c'était nécessaire ...
la source