it-swarm.com.de

Wie benutze ich PHP OPCache?

PHP 5.5 wurde veröffentlicht und enthält ein neues Code-Caching-Modul namens OPCache, für das es jedoch keine Dokumentation zu geben scheint.

Wo ist die Dokumentation dafür und wie verwende ich OPcache?

240
Danack

Installation

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 Ihrem php.ini die folgende Zeile hinzu:

zend_extension=/full/path/to/opcache.so (nix)
zend_extension=C:\path\to\php_opcache.dll (win)

Beachten Sie, dass Sie den Pfad, wenn er Leerzeichen enthält, in Anführungszeichen setzen sollten:

zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"

Beachten Sie auch, dass Sie die Direktive zend_extension anstelle der "normalen" extension Direktive verwenden müssen, da sie sich auf die eigentliche Zend Engine auswirkt (d. H. Auf das, was PHP ausführt).

Verwendungszweck

Derzeit gibt es vier Funktionen, die Sie verwenden können:

opcache_get_configuration() :

Gibt ein Array mit der aktuell von OpCache verwendeten Konfiguration zurück. Dies umfasst alle ini-Einstellungen sowie Versionsinformationen und Dateien, die auf der Blacklist stehen.

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, neu gestartet, voll usw.), die Speichernutzung, Treffer, Fehler und 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 heißt, alle möglichen zwischengespeicherten Skripte werden beim nächsten Besuch erneut analysiert.

opcache_reset();

opcache_invalidate() :

Invalidiert ein bestimmtes zwischengespeichertes Skript. Dies bedeutet, dass das Skript beim nächsten Besuch erneut analysiert wird.

opcache_invalidate('/path/to/script/to/invalidate.php', true);

Wartung und Berichte

Es gibt einige GUIs, die zur Pflege von OpCache und zum Generieren nützlicher Berichte erstellt wurden. Diese Tools nutzen die oben genannten Funktionen.

OpCacheGUI

Haftungsausschluss Ich bin der Autor dieses Projekts

Eigenschaften:

  • OpCache-Status
  • OpCache-Konfiguration
  • OpCache-Statistiken
  • OpCache zurückgesetzt
  • Übersicht über zwischengespeicherte Skripte
  • Ungültigmachung der zwischengespeicherten Skripte
  • Mehrsprachig
  • Unterstützung für mobile Geräte
  • Glänzende Grafiken

Screenshots:

status

cached-scripts

graphs

mobilr

URL: https://github.com/PeeHaa/OpCacheGUI

opcache-status

Eigenschaften:

  • OpCache-Status
  • OpCache-Konfiguration
  • OpCache-Statistiken
  • Übersicht über zwischengespeicherte Skripte
  • Einzelne Datei

Bildschirmfoto:

status

URL: https://github.com/rlerdorf/opcache-status

opcache-gui

Eigenschaften:

  • OpCache-Status
  • OpCache-Konfiguration
  • OpCache-Statistiken
  • OpCache zurückgesetzt
  • Übersicht über zwischengespeicherte Skripte
  • Ungültigmachung der zwischengespeicherten Skripte
  • Automatische Aktualisierung

Bildschirmfoto:

opcache-gui-overview

URL: https://github.com/amnuts/opcache-gui

369
PeeHaa

OPcache ersetzt APC

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 dies keinen Einfluss darauf hat, wie Sie Code schreiben.

Wenn Sie derzeit APC zum Speichern anderer Daten verwenden (über die Funktion apc_store() ), können Sie dies jedoch nicht tun, wenn Sie sich für OPCache entscheiden.

Sie müssen eine andere Bibliothek wie APC oder Yac verwenden, die beide Daten im gemeinsam genutzten PHP Speicher speichern, oder zur Verwendung von Memcached wechseln. die Daten im Speicher in einem separaten Prozess zu PHP speichert.

Außerdem verfügt OPcache über keine Entsprechung zur Upload-Fortschrittsanzeige in APC. Verwenden Sie stattdessen Fortschritt des Sitzungs-Uploads .

Einstellungen für OPcache

Die Dokumentation zu OPcache finden Sie hier mit allen aufgeführten Konfigurationsoptionen hier . 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 Codeanmerkungen 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).

151
Danack

Ich werde meine zwei Cent für das, was ich benutze, einkassieren.

Ich habe ein umfangreiches Framework mit vielen Feldern und Validierungsmethoden und -aufzählungen erstellt, um mit meiner Datenbank kommunizieren zu können.

ohne opcache

Wenn Sie dieses Skript ohne Opcache verwenden und 9000 Anforderungen in 2,8 Sekunden an den Apache-Server senden, wird die maximale CPU-Auslastung von 90-100% für 70-80 Sekunden erreicht, bis alle Anforderungen erfüllt sind.

Total time taken: 76085 milliseconds(76 seconds)

Mit aktiviertem Opcache

Wenn der Opcache aktiviert ist, läuft er etwa 25 Sekunden lang mit 25-30% CPU-Auslastung und übergibt niemals 25% CPU-Auslastung.

Total time taken: 26490 milliseconds(26 seconds)

Ich habe eine Opcache-Blacklist-Datei erstellt, um das Zwischenspeichern von allem außer dem Framework zu deaktivieren, das nur 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 erneute Laden/Überprüfen der Cache-Dateien zu machen. Wenn alles zwischengespeichert wird, sparen Sie eine Sekunde bei der Gesamtzahl der Anforderungen 25546 milliseconds

Dadurch wird die Menge der Daten/Anforderungen, die ich pro Sekunde verarbeiten kann, erheblich erweitert, ohne dass der Server ins Schwitzen kommt.

19
Tschallacka

Mit PHP 5.6 unter Amazon Linux (sollte unter RedHat oder CentOS identisch sein):

yum install php56-opcache

und starten Sie Apache neu.

4
Roger Dueck

Ich bin darauf gestoßen, als ich Moodle eingerichtet habe. Ich habe die folgenden Zeilen in die php.ini-Datei 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

intl -> http://php.net/manual/en/book.intl.php

2
Anoop Toffy