Wie benutzt man PHP OPCache?


249

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?




Schade, dass die Dokumentation uns NICHT sagt, wie man Opcache korrekt kompiliert / deaktiviert oder die Autokonfiguration von PHP 5.6.24+ umgeht, damit PHP kompiliert wird! :-(
Filip OvertoneSinger Rydlo

@ Fred-ii- "Es gibt viele Einstellungen, die möglicherweise angepasst werden müssen. Es wird sehr hilfreich sein, zu verstehen, wie es funktioniert, und Probleme während der Stabilisierungsphase des PHP 5.5-Release-Prozesses zu identifizieren." ... Dieser Blog-Beitrag ist nicht sehr hilfreich. Es erklärt nicht, wie man versteht, wie es funktioniert oder wie man die Einstellungen am besten anpasst :(
icc97

Antworten:


371

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 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_extensionDirektive anstelle der "normalen" extensionDirektive verwenden müssen, da sie sich auf die eigentliche Zend-Engine auswirkt (dh auf das, was PHP ausführt).

Verwendung

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);

Wartung und Berichte

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:

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

Screenshots:

Status

zwischengespeicherte Skripte

Grafiken

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 zwischengespeicherter Skripte
  • Automatische Aktualisierung

Bildschirmfoto:

opcache-gui-übersicht

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


6
Irgendwas in Bezug auf PHP-CLI? Wie nutzt CLI es? Beim Neustart von FPM wird OPCache zurückgesetzt. Betrifft dies auch den OPCache von CLI? Ist der OPCache von CLI separat oder teilt er denselben Cache-Pool mit FPM? Vielen Dank!
Shahriyar Imanov

3
OpCache war für mich bei meiner letzten Installation unter Ubuntu 14.04, Apache 2.4.7, PHP 5.5.9 standardmäßig aktiviert.
jstats

Hallo, in Ihrem dritten Screenshot ist cache_full falsch. Ich gehe davon aus, dass es sich um das Caching ganzer Seiten handelt. Können Sie mir bitte sagen, wie ich es aktivieren soll? (machen Sie es wahr)
Brucekaushik

Ich irre mich, das ist nicht zum Zwischenspeichern einer ganzen Seite, aber es wird als wahr angezeigt, wenn der Speicher, den der Cache verwendet, voll ist. Trotzdem danke!
Brucekaushik

zend_extension = C: \ path \ to \ php_opcache.dll (win) - Das Hinzufügen dieser Zeile in php.ini funktioniert einwandfrei.
Kalidasan

152

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 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 .

Einstellungen für OPcache

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).


4
Sind dies empfohlene Einstellungen für Produktionsumgebungen, für die Entwicklung oder für beides?
Marcvangend

1
Vielleicht ein Missverständnis meinerseits, was genau Opcache ist und wofür es verwendet wird, aber ich habe es unten mit dem PeeHaa-Statusskript konfiguriert und getestet. Alles funktioniert. Aber ich stelle immer noch die OP-Frage. "Wie benutzt man es?" Es ist nicht zum Zwischenspeichern von Ansichten und Dingen, oder?
Isimmons

3
@isimmons "OPcache verbessert die PHP-Leistung, indem vorkompilierter Skriptbytecode im gemeinsam genutzten Speicher gespeichert wird, sodass PHP keine Skripts bei jeder Anforderung laden und analysieren muss."
Danack

1
@ marcvangend Guter Punkt! Ich denke, Caching macht in der Produktion nur wirklich Sinn, daher sind diese Konfigurationen wahrscheinlich Produktionseinstellungen.
Sliq

3
Kann jemand erklären, warum die empfohlene Einstellungsleistung schlechter als die Standardeinstellung ist oder wann sie wirksam werden sollte?
RP

19

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.


3
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
Tschallacka

1
Übrigens, wenn ich dies mit Memcache ausführe, der 2100 Datenbankanforderungen ausführt, wird in einer Sekunde das Skript ausgeführt, das ich innerhalb von 150 Mikrosekunden (ungefähr
1/6

1
Opcache speichert die PHP-Dateien in kompilierter Form im Speicher. Sie müssen also nicht mehr von der Festplatte lesen und Dateien mit dem PHP-Parser kompilieren und optimieren. Memcache ist etwas, mit dem Sie Variablen zwischen Sitzungen speichern können. Angenommen, ein Benutzer verfügt über ein Aktualisierungsskript, das 10 Sekunden lang dieselben Parameter anfordert, während der Benutzer auf den Bildschirm starrt. Sie können den Mem-Cache verwenden, um die Abfrage einmal zu kompilieren, und dann die kompilierte Abfrage weiterhin aus dem Speicher anfordern, anstatt sie neu zu generieren.
Tschallacka

2
es tut nicht. 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.
Tschallacka

3
Steuert tatsächlich, opcache.revalidate_freqwie 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_timestampsstandardmäßig aktivierte Einstellung nicht geändert haben .
jjlin

4

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

yum install php56-opcache

und dann Apache neu starten.


2

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

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


1
Es könnte erwähnenswert sein, dass diese Einstellungen hier dokumentiert sind: docs.moodle.org/30/en/OPcache
sierrasdetandil

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.