Ich muss alle APC-Cache-Einträge löschen, wenn ich eine neue Version der Site bereitstelle. APC.php hat eine Schaltfläche zum Löschen aller Opcode-Caches, aber ich sehe keine Schaltflächen zum Löschen aller Benutzereinträge, aller Systemeinträge oder aller Verzeichniseinträge.
Ist es möglich, alle Cache-Einträge über die Befehlszeile oder auf andere Weise zu löschen?
php
performance
caching
apc
lo_fye
quelle
quelle
Antworten:
Sie können die PHP-Funktion verwenden
apc_clear_cache
.Durch Aufrufen
apc_clear_cache()
wird der Systemcache geleert, und durch Aufrufenapc_clear_cache('user')
wird der Benutzercache geleert.quelle
php -r "apc_clear_cache();"
Ich glaube nicht, dass eine dieser Antworten tatsächlich dazu dient, den APC-Cache von der Befehlszeile zu löschen. Wie Frank Farmer oben kommentiert hat, wird die CLI in einem von Apache getrennten Prozess ausgeführt.
Meine Lösung für das Löschen über die Befehlszeile bestand darin, ein Skript zu schreiben, das ein APC-Löschskript in das kopiert
web
Verzeichnis zugreift und es dann löscht. Auf das Skript kann nur vom lokalen Host aus zugegriffen werden.apc_clear.php
Dies ist die Datei, die das Skript in das Webverzeichnis kopiert, auf diese zugreift und sie löscht.
Cache-Löschskript
Dieses Skript kopiert apc_clear.php in das Webverzeichnis, greift darauf zu und löscht es dann. Dies basiert auf einer Symfony-Aufgabe. In der Symfony-Version wird die Symfony-Form zum Kopieren und Aufheben der Verknüpfung aufgerufen, die Fehler behandelt. Möglicherweise möchten Sie Überprüfungen hinzufügen, ob sie erfolgreich sind.
quelle
Ich weiß, dass es nicht jedermanns Sache ist, aber: Warum nicht einen ordnungsgemäßen Neustart von Apache durchführen?
Zum Beispiel bei Centos / RedHat Linux:
Ubuntu:
quelle
Dies ist in der Dokumentation nicht angegeben, aber um den Opcode-Cache zu löschen, müssen Sie Folgendes tun:
BEARBEITEN: Dies scheint nur für einige ältere Versionen von APC zu gelten.
Unabhängig davon, welche Version Sie verwenden, können Sie den APC-Cache mod_php oder fastcgi nicht aus einem PHP-CLI-Skript löschen, da das CLI-Skript von einem anderen Prozess als mod_php oder Fastcgi ausgeführt wird. Sie müssen apc_clear_cache () innerhalb des Prozesses (oder des untergeordneten Prozesses) aufrufen, für den Sie den Cache leeren möchten. Die Verwendung von Curl zum Ausführen eines einfachen PHP-Skripts ist ein solcher Ansatz.
quelle
Wenn Sie den apc-Cache im Befehl löschen möchten: (verwenden Sie sudo, wenn Sie es benötigen)
APCu
APC
quelle
Wenn Sie auf einem NGINX / PHP-FPM-Stack arbeiten, ist es am besten, nur php-fpm neu zu laden
service php-fpm reload
(oder was auch immer Ihr Reload-Befehl auf Ihrem System sein mag)quelle
Wie im APC-Dokument definiert:
So löschen Sie den Cache-Lauf:
quelle
Eine andere Möglichkeit zur Verwendung der Befehlszeile, die noch nicht erwähnt wurde, ist die Verwendung von Curl.
Dies löst Ihr Problem nicht für alle Cache-Einträge, wenn Sie das Skript stock apc.php verwenden. Es kann jedoch ein angepasstes oder ein anderes Skript aufrufen, das Sie eingerichtet haben.
Dies löscht den Opcode-Cache:
Ändern Sie den OB-Parameter in 3, um den Benutzercache zu löschen:
Fügen Sie beide Zeilen in ein Skript ein und rufen Sie es mit $ PASSWORD in Ihrer Umgebung auf.
quelle
Wenn Sie die Ergebnisse über json überwachen möchten, können Sie diese Art von Skript verwenden:
Wie in anderen Antworten erwähnt, muss dieses Skript über http oder curl aufgerufen werden und Sie müssen gesichert sein, wenn es im Webstamm Ihrer Anwendung verfügbar ist. (per IP, Token ...)
quelle
apc_clear_cache () funktioniert nur mit derselben PHP-SAPI, für die der Cache geleert werden soll. Wenn Sie PHP-FPM haben und den APC-Cache löschen möchten, müssen Sie dies über eines der PHP-Skripte tun, NICHT über die Befehlszeile, da die beiden Caches getrennt sind.
Ich habe CacheTool geschrieben , ein Befehlszeilentool, das genau dieses Problem löst. Mit einem Befehl können Sie Ihren PHP-FPM-APC-Cache über die Befehlszeile löschen (er stellt für Sie eine Verbindung zu php-fpm her und führt APC-Funktionen aus).
Es funktioniert auch für Opcache.
Sehen Sie hier, wie es funktioniert: http://gordalina.github.io/cachetool/
quelle
Der Stall von APC hat die Möglichkeit, einen Cache in seiner Schnittstelle selbst zu löschen. Um diese Einträge zu löschen, müssen Sie sich bei der apc-Schnittstelle anmelden.
APC hat die Möglichkeit, Benutzername und Passwort in der Datei apc.php festzulegen.
quelle
php-apc
Paket auf Ihrem System installiert haben .Wenn Sie fpm unter Ubuntu ausführen, müssen Sie den folgenden Code ausführen (aktiviert bei 12 und 14).
quelle
apc.ini
apc.stat = "1" zwingt APC, das Skript bei jeder Anforderung zu statisieren (zu überprüfen), um festzustellen, ob es geändert wurde. Wenn es geändert wurde, wird die neue Version neu kompiliert und zwischengespeichert.
Wenn diese Einstellung deaktiviert ist, wird APC nicht überprüft. Dies bedeutet normalerweise, dass der Webserver neu gestartet oder der Cache manuell geleert werden muss, um APC zu zwingen, Dateien erneut zu überprüfen. Beachten Sie, dass FastCGI-Webserverkonfigurationen den Cache beim Neustart möglicherweise nicht leeren. Auf einem Produktionsserver, auf dem sich die Skriptdateien selten ändern, können durch deaktivierte Statistiken eine erhebliche Leistungssteigerung erzielt werden.
quelle
Die neue APC-Administrationsoberfläche bietet Optionen zum Hinzufügen / Löschen von Benutzercache und Opcode-Cache. Eine interessante Funktion ist das Hinzufügen / Aktualisieren / Löschen von Verzeichnissen aus dem OpCode-Cache
APC Admin-Dokumentation
quelle
Eine gute Lösung für mich war, den veralteten Benutzercache nach der Bereitstellung einfach nicht mehr zu verwenden.
Wenn Sie jedem Ihrer Schlüssel ein Präfix hinzufügen, können Sie das Präfix beim Ändern der Datenstruktur von Cache-Einträgen ändern. Auf diese Weise erhalten Sie beim Bereitstellen das folgende Verhalten:
Dies ist nur für den Benutzercache möglich.
quelle
Erstellen Sie die Datei APC.php
Führen Sie es in Ihrem Browser aus.
quelle
Meine Problemumgehung für Symfony-Build mit Beute von Instanzen auf demselben Server:
Schritt 1. Erstellen Sie einen Trigger oder etwas, um ein Dateiflag zu setzen (z. B. Symfony-Befehl), und erstellen Sie dann
marker file
..Schritt 2. Fügen Sie in der Indexdatei zu Beginn den Löschcode hinzu und entfernen Sie ihn
marker file
.Schritt 2. Führen Sie die App aus.
quelle
Wir hatten ein Problem mit APC und Symlinks zu Symlinks zu Dateien - es scheint Änderungen in Dateien selbst zu ignorieren. Irgendwie half es, die Datei selbst zu berühren. Ich kann nicht sagen, was der Unterschied zwischen dem Ändern und Berühren einer Datei ist, aber irgendwie war es notwendig ...
quelle