PHP 5.5 wurde veröffentlicht und enthält ein neues Code-Caching-Modul namens OPCache, aber es scheint keine Dokumentation dafür zu geben.
Wo ist die Dokumentation dafür und wie verwende ich OPcache?
PHP 5.5 wurde veröffentlicht und enthält ein neues Code-Caching-Modul namens OPCache, aber es scheint keine Dokumentation dafür zu geben.
Wo ist die Dokumentation dafür und wie verwende ich OPcache?
Antworten:
OpCache wird standardmäßig unter PHP5.5 + kompiliert. Es ist jedoch standardmäßig deaktiviert. Um OpCache in PHP5.5 + verwenden zu können, müssen Sie es zuerst aktivieren. Dazu müssten Sie Folgendes tun.
Fügen Sie Ihrer Zeile die folgende Zeile hinzu php.ini
:
zend_extension=/full/path/to/opcache.so (nix)
zend_extension=C:\path\to\php_opcache.dll (win)
Beachten Sie, dass Sie den Pfad in Anführungszeichen setzen sollten, wenn er Leerzeichen enthält:
zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"
Beachten Sie auch, dass Sie die zend_extension
Direktive anstelle der "normalen" extension
Direktive verwenden müssen, da sie sich auf die eigentliche Zend-Engine auswirkt (dh auf das, was PHP ausführt).
Derzeit gibt es vier Funktionen, die Sie verwenden können:
opcache_get_configuration()
::Gibt ein Array zurück, das die aktuell verwendete Konfiguration enthält, die OpCache verwendet. Dies umfasst alle INI-Einstellungen sowie Versionsinformationen und Dateien auf der schwarzen Liste.
var_dump(opcache_get_configuration());
opcache_get_status()
::Dadurch wird ein Array mit Informationen zum aktuellen Status des Caches zurückgegeben. Diese Informationen umfassen Dinge wie: den Status des Caches (aktiviert, Neustart, voll usw.), die Speichernutzung, Treffer, Fehler und einige weitere nützliche Informationen. Es enthält auch die zwischengespeicherten Skripte.
var_dump(opcache_get_status());
opcache_reset()
::Setzt den gesamten Cache zurück. Das bedeutet, dass alle möglichen zwischengespeicherten Skripte beim nächsten Besuch erneut analysiert werden.
opcache_reset();
opcache_invalidate()
::Ungültig macht ein bestimmtes zwischengespeichertes Skript. Das heißt, das Skript wird beim nächsten Besuch erneut analysiert.
opcache_invalidate('/path/to/script/to/invalidate.php', true);
Es wurden einige GUIs erstellt, um OpCache zu verwalten und nützliche Berichte zu erstellen. Diese Tools nutzen die oben genannten Funktionen.
OpCacheGUI
Haftungsausschluss Ich bin der Autor dieses Projekts
Eigenschaften:
Screenshots:
URL: https://github.com/PeeHaa/OpCacheGUI
Opcache-Status
Eigenschaften:
Bildschirmfoto:
URL: https://github.com/rlerdorf/opcache-status
opcache-gui
Eigenschaften:
Bildschirmfoto:
Da OPcache das APC-Modul ersetzen soll, ist es nicht möglich, sie in PHP parallel auszuführen. Dies ist in Ordnung für das Zwischenspeichern von PHP-Opcode, da sich dies nicht auf das Schreiben von Code auswirkt.
Wenn Sie jedoch derzeit APC zum Speichern anderer Daten verwenden (über die apc_store()
Funktion), können Sie dies nicht tun, wenn Sie sich für OPCache entscheiden.
Sie müssen eine andere Bibliothek wie APCu oder Yac verwenden, in der beide Daten im gemeinsam genutzten PHP-Speicher gespeichert sind, oder auf memcached umschalten, in der Daten in einem separaten Prozess zu PHP im Speicher gespeichert werden.
Außerdem verfügt OPcache nicht über die in APC vorhandene Upload-Fortschrittsanzeige. Stattdessen sollten Sie den Sitzungs-Upload-Fortschritt verwenden .
Die Dokumentation zu OPcache finden Sie hier mit allen hier aufgeführten Konfigurationsoptionen . Die empfohlenen Einstellungen sind:
; Sets how much memory to use
opcache.memory_consumption=128
;Sets how much memory should be used by OPcache for storing internal strings
;(e.g. classnames and the files they are contained in)
opcache.interned_strings_buffer=8
; The maximum number of files OPcache will cache
opcache.max_accelerated_files=4000
;How often (in seconds) to check file timestamps for changes to the shared
;memory storage allocation.
opcache.revalidate_freq=60
;If enabled, a fast shutdown sequence is used for the accelerated code
;The fast shutdown sequence doesn't free each allocated block, but lets
;the Zend Engine Memory Manager do the work.
opcache.fast_shutdown=1
;Enables the OPcache for the CLI version of PHP.
opcache.enable_cli=1
Wenn Sie eine Bibliothek oder einen Code verwenden, der Code-Anmerkungen verwendet, müssen Sie das Speichern von Kommentaren aktivieren:
opcache.save_comments=1
Wenn deaktiviert, werden alle PHPDoc-Kommentare aus dem Code entfernt, um die Größe des optimierten Codes zu verringern. Das Deaktivieren von "Doc Comments" kann einige vorhandene Anwendungen und Frameworks beschädigen (z. B. Doctrine, ZF2, PHPUnit).
Ich werde meine zwei Cent für das, was ich mit Opcache benutze, einwerfen.
Ich habe ein umfangreiches Framework mit vielen Feldern, Validierungsmethoden und Aufzählungen erstellt, um mit meiner Datenbank kommunizieren zu können.
Ohne Opcache
Wenn Sie dieses Skript ohne Opcache verwenden und 9000 Anfragen in 2,8 Sekunden an den Apache-Server senden, wird es für 70-80 Sekunden bei 90-100% CPU maximal, bis alle Anfragen eingeholt werden.
Total time taken: 76085 milliseconds(76 seconds)
Mit aktiviertem Opcache
Wenn Opcache aktiviert ist, wird es etwa 25 Sekunden lang mit einer CPU-Zeit von 25 bis 30% ausgeführt und überschreitet niemals die CPU-Auslastung von 25%.
Total time taken: 26490 milliseconds(26 seconds)
Ich habe eine Opcache-Blacklist-Datei erstellt, um das Caching von allem außer dem Framework zu deaktivieren, das alles statisch ist und keine Änderung der Funktionalität erfordert. Ich wähle explizit nur die Framework-Dateien aus, damit ich sie entwickeln kann, ohne mir Gedanken über das Neuladen / Validieren der Cache-Dateien machen zu müssen. Wenn Sie alles zwischengespeichert haben, sparen Sie eine Sekunde bei der Gesamtzahl der Anforderungen25546 milliseconds
Dies erhöht die Menge an Daten / Anfragen, die ich pro Sekunde verarbeiten kann, erheblich, ohne dass der Server ins Schwitzen gerät.
zend_extension=php_opcache.dll; opcache.memory_consumption=128; opcache.interned_strings_buffer=8; opcache.max_accelerated_files=4000; opcache.revalidate_freq=60; opcache.fast_shutdown=1; opcache.enable_cli=1; opcache.blacklist_filename="C:\xampp\php\cfg\opcache.blacklist;
Ersetzen Sie einfach die; mit einem Eintrag in die INI-Datei. Aber das habe ich benutzt. meistens Standardmaterial
opcache.revalidate_freq=60;
legt fest, wie lange eine Datei in Sekunden im Speicher verbleiben kann. Wenn die Zeit abgelaufen ist, wird die Datei neu kompiliert.
opcache.revalidate_freq
wie oft ein Skript auf Änderungen überprüft wird (basierend darauf, ob sich sein Zeitstempel geändert hat). Wenn der Zeitstempel eines Skripts derselbe bleibt wie beim letzten Kompilieren, wird er nicht neu kompiliert. All dies setzt voraus, dass Sie die opcache.validate_timestamps
standardmäßig aktivierte Einstellung nicht geändert haben .
Mit PHP 5.6 unter Amazon Linux (sollte unter RedHat oder CentOS identisch sein):
yum install php56-opcache
und dann Apache neu starten.
Ich bin darauf gestoßen, als ich Moodle aufgebaut habe. Ich habe die folgenden Zeilen in die Datei php.ini eingefügt.
zend_extension=C:\xampp\php\ext\php_opcache.dll
[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0
; If something does not work in Moodle
;opcache.revalidate_path = 1 ; May fix problems with include paths
;opcache.mmap_base = 0x20000000 ; (Windows only) fix OPcache crashes with event id 487
; Experimental for Moodle 2.6 and later
;opcache.fast_shutdown = 1
;opcache.enable_cli = 1 ; Speeds up CLI cron
;opcache.load_comments = 0 ; May lower memory use, might not be compatible with add-ons and other apps
extension=C:\xampp\php\ext\php_intl.dll
[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING
opcache.fast_shutdown = 0
github.com/zendtech/ZendOptimizerPlus/issues/146