Ist APC opcode-cache gemeinsam von den PHP-FPM-pools/Arbeitnehmer?
Internet hat eine Menge Diskussionen, dass der Aufruf apc_cache_clear()
im CLI nicht klar opcode-caches von "web" PHP-Prozesse, ob Sie laufen im Apache oder FPM (siehe Wie klar APC-cache Einträge? ). Als Lösung vorschlagen, ist es möglich, erstellen Sie eine einfache PHP-Seite aufruft apc_cache_clear()
und rufen, dass von CLI. Symfony ist ApcBundle tut.
Wenn die apc_cache_clear()
von CLI nicht leeren Sie den cache von Apache/FPM, hat es zwischen FPM Arbeitnehmer? Wenn ich rufe, /clear_apc_cache.php über HTTP, es nur von einer, die FPM-worker-Prozesse. So ist die APC opcode cache wirklich geteilt zwischen den pools und der Arbeiter - und spezifischer: ist es gelöscht, alle Arbeitnehmer automatisch?
InformationsquelleAutor der Frage Ville Mattila | 2012-10-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle php-fpm-worker teilen sich die gleichen opcode-cache als parent-php-fpm-Prozess; Quelle. Wenn Sie ein /apc_clear_cache.php Datei und rufen Sie, dass über HTTP (mit curl), wird klar, dass die opcode-cache für alle Arbeiter mit der gleichen php-fpm-master-Prozess.
Diese blog-Artikel hat eine sehr gute Erklärung, wie apc funktioniert und wie klar ist es effektiv bei der Freigabe.
InformationsquelleAutor der Antwort Herman J. Radtke III
Können Sie deaktivieren Sie das opcode-cache über die cli die zimmerreserviereung, ohne das bereitstellen von Dateien auf Ihre website, wenn Sie das Skript ausführen, über die FastCGI-Schnittstelle direkt.
Habe ich diese gist die Sie verwenden können, auf Ihren Servern deaktivieren Sie das php5-fpm cache.
Wenn Sie mit den unix-sockets:
php clear-apc.php --sock /var/run/php5-fpm.sock
Ansonsten:
php clear-apc.php --port=[port]
weglassen oder für Standard -
127.0.0.1:9000
InformationsquelleAutor der Antwort Stuart Carnie
Ich habe gerade herausgefunden, dass verschiedene pools teilen sich auch den APC-cache, zumindest in PHP 5.4 mit FPM und so weit wie der opcode-cache Inhalt betrifft.
Dies ist, wie ich es bemerkt:
Ich habe mehrere PHP-FPM-pools, wobei jeder pool chroot under /srv/www/domain.com/directory.
Der wichtigste Standort für PHP-Scripte ist /srv/www/domain.com/docroot/.
Nun, wenn ich eine Datei erstellen /srv/www/domain_1.com/docroot/test.php und laden Sie das Skript, es zeigt, was es zeigen sollte.
Allerdings, wenn ich die Datei erstellen /srv/www/domain_2.com/docroot/test.php die Inhalte zeigen auch unter domain_1.com.
Ich denke, das passiert, weil APC verwendet den Speicherort der Datei, die als Schlüssel für den cache, und in beiden Fällen der Schlüssel ist, /docroot/test.php.
Clearing der opcode-cache kann nur eingeschränkt werden, um einen einzigen pool. Habe ich noch nicht getestet, obwohl dies.
BEARBEITEN Clearing der opcode-cache ist nicht restircted zu einer einzigen app-pool, die komplette APC-cache wird gelöscht, wenn apc_cache_clear() aufgerufen wird.
Ich habe auch versucht, die Verwendung von apc.mmap_file_mask, wenn Sie eine andere Maske für jeden pool. Dies nicht etwas ändern, updates in einer app-pool-Dateien wurden schon in anderen pools.
War dieses Verhalten beobachtet, mit der apc.stat=0 einstellen. Alle änderungen von Dateien überwacht werden, die mit lsyncd, erzwingen eine erneute Kompilierung der Eintrag im APC-cache.
InformationsquelleAutor der Antwort Tero Kilkanen