Ausführliche Analyse der Funktionsweise von PHP Opcache
In PHP-Projekten, insbesondere in Szenarien mit hoher Parallelität und großem Datenverkehr, ist die Verbesserung der Antwortzeit von PHP eine sehr wichtige Aufgabe.
Opcache ist eine unverzichtbare Komponente zur Optimierung der PHP-Leistung, insbesondere in Projekten, die das PHP-Framework verwenden.
1. Überblick
Bevor wir die OPCache-Funktion verstehen, müssen wir zunächst den Arbeitsmechanismus von PHP-FPM + Nginx und den Mechanismus der Interpretation und Ausführung von PHP-Skripten verstehen.
1.1 Arbeitsmechanismus von PHP-FPM + Nginx
Die Anfrage geht vom Webbrowser an Nginx und dann an die PHP-Verarbeitung. Es gibt insgesamt fünf Schritte:
Schritt 1: Starten Sie den Dienst
- Starten Sie PHP-FPM. PHP-FPM unterstützt zwei Kommunikationsmodi: TCP-Socket und Unix-Socket;
- PHP-FPM wird zwei Arten von Prozessen starten: Ersterer ist für die Überwachung von Ports, die Zuweisung von Aufgaben usw. verantwortlich Verwalten von Workers. Letzteres ist das CGI-Programm von PHP, das für die Interpretation, Kompilierung und Ausführung von PHP-Skripten verantwortlich ist.
- Starten Sie Nginx. Zuerst wird das Modul ngx_http_fastcgi_module geladen, wodurch die FastCGI-Ausführungsumgebung initialisiert und der FastCGI-Protokollanforderungs-Proxy implementiert wird.
- Hinweis hier: Der Fastcgi-Worker-Prozess (CGI-Prozess) wird von PHP-FPM und nicht von Nginx verwaltet. Nginx ist nur ein Proxy.
Schritt 2: Anfrage => Nginx. Nginx => PHP-FPM
- Nginx übersetzt die Anfrage in eine Fastcgi-Anfrage
- und sendet sie über TCP-Socket/Unix-Socket an den Masterprozess von PHP-FPM. Schritt 4: PHP-FPM-Master = > Worker
PHP-FPM-Masterprozess empfängt die Anfrage
und weist dem Worker-Prozess die Ausführung des PHP-Skripts zu. Wenn- kein inaktiver Worker vorhanden ist, wird ein 502-Fehler zurückgegeben
eine Zeitüberschreitung aufweist, 504-Fehler zurückgeben
- Die Verarbeitung ist abgeschlossen, Ergebnis zurückgeben
- Schritt 5: PHP-FPM Worker => Master => Nginx
- PHP -FPM-Worker-Prozess gibt das Verarbeitungsergebnis zurück und schließt die Verbindung, wartet auf die nächste AnfragePHP-FPM-Master-Prozess gibt das Verarbeitungsergebnis über Socket zurückNginx-Handler sendet jeden Antwortpuffer nacheinander an den ersten Filter → den zweiten → und so weiter on → Die endgültige Antwort wird an den Client gesendet
1.2 Der Mechanismus der Erklärung und Ausführung von PHP-Skripten
- Nachdem wir den gesamten Verarbeitungsablauf von PHP + Nginx verstanden haben, werfen wir einen Blick auf den spezifischen Ausführungsablauf von PHP Skripte.
- Zuerst schauen wir uns ein Beispiel an:
<?php if (!empty($_POST)) { echo "Response Body POST: ", json_encode($_POST), "\n"; } if (!empty($_GET)) { echo "Response Body GET: ", json_encode($_GET), "\n"; }
Lassen Sie uns den Ausführungsprozess analysieren:
php initialisiert den Ausführungslink, startet die Zend-Engine, lädt das registrierte Erweiterungsmodul
Nach der Initialisierung wird die Skriptdatei gelesen und die Zend-Engine führt lexikalische Operationen aus Analyse (Lex) der Skriptdatei), Grammatikanalyse (BISON). Im PHP-CLI-Modus werden die vier Schritte nacheinander ausgeführt.
Schritt 1) wird einmal ausgeführt, wenn PHP-FPM gestartet wird, und wird in nachfolgenden Anfragen nicht erneut ausgeführt. Führen Sie die Schritte 2) bis 4) einmal für jede Anfrage aus -
Im PHP-FPM-Modus muss jede Anfrage einmal verarbeitet werden, was eine enorme Verschwendung von Systemressourcen darstellt Gibt es eine Möglichkeit, es zu optimieren? Natürlich gibt es, wie zum Beispiel:
OPCache: früher bekannt als Zend Optimizer+, ist eine Open-Source-Komponente von Zend Server, sehr zu empfehlen; - APC: Alternative PHP Cache ist ein offener und kostenloser PHP-Opcode Caching-Komponente, wird zum Caching verwendet, PHP-Zwischencode optimieren; nicht mehr aktualisiert, nicht empfohlen
APCu: Es ist ein Zweig von APC, gemeinsam genutzter Speicher, Cache-Benutzerdaten, kann Opcode nicht zwischenspeichern, kann auch mit Opcache verwendet werdeneAccelerate: auch nicht mehr aktualisiert, nicht empfohlen
xCache: Es wird nicht mehr empfohlen,
OPCache ist eine offene und kostenlose Opcode-Cache-Erweiterung, die offiziell von Zend produziert wurde. Dadurch entfällt die Notwendigkeit, jedes Mal PHP-Skripte laden und analysieren zu müssen. OPcache-Erweiterung wurde in PHP 5.5.0 und nachfolgenden Versionen gebündelt.
Zwei Arten von Inhalten zwischenspeichern:
OPCodeInterne Zeichenfolge, wie Kommentare, Variablennamen usw.- 3. OPCache-Prinzip
- Der Hauptmechanismus des OPCache-Caching ist:
- Kompilierte Opcode im Shared Memory wird für den Zugriff anderer Prozesse bereitgestellt
- .
Dabei geht es um den Speicherfreigabemechanismus. Darüber hinaus weisen alle Speicherressourcenoperationen Sperrprobleme auf. Lassen Sie uns diese einzeln erklären.
3.1 Gemeinsamer Speicher
UNIX/Linux-System bietet viele Möglichkeiten, Speicher zwischen Prozessen zu teilen:
- System-V shm API: System V gemeinsam genutzter Speicher,
- sysv shm ist persistent, es sei denn, es handelt sich um einen Prozess explizit gelöscht, andernfalls bleibt es immer im Speicher, bis das System heruntergefahren wird;
mmap-zugeordneter Speicher ist nicht dauerhaft. Wenn der Prozess heruntergefahren wird, wird die Zuordnung ungültig, es sei denn, sie wurde zugeordnet im Voraus. Auf einer Datei
Der Speicherzuordnungsmechanismus mmap ist ein POSIX-Standardsystemaufruf. Es gibt zwei Arten der anonymen Zuordnung und der DateizuordnungEin großer Vorteil von mmap besteht darin, dass die Datei dem Adressraum des Prozesses zugeordnet wird vermeidet die Notwendigkeit, Daten vom Benutzerpuffer in den Kopiervorgang des Kernel-Seiten-Cache-Puffers zu übertragen.
Ein weiterer Vorteil besteht natürlich darin, dass keine häufigen Lese-/Schreib-Systemaufrufe erforderlich sind.POSIX-API: Der gemeinsam genutzte Speicher von System V ist veraltet. Der gemeinsam genutzte POSIX-Speicher bietet eine einfachere Verwendung und eine rationaler gestaltete API. Basierend auf dem PHP-Bytecode-Caching-Szenario ist das Speicherverwaltungsdesign von OPCache sehr einfach: schnelles Lesen und Schreiben, keine Speicherfreigabe und abgelaufene Daten sind auf „Verschwendet“ gesetzt.
Wenn der verschwendete Speicher größer als der eingestellte Wert ist, wird der OPCache-Mechanismus automatisch neu gestartet, der Cache wird geleert und neu generiert.-
- Jede Operation von Speicherressourcen beinhaltet den Sperrmechanismus.
- Gemeinsamer Speicher: Nur ein Prozess darf Schreibvorgänge pro Zeiteinheit ausführen, und mehrere Prozesse dürfen Lesevorgänge ausführen.
- Schreibvorgänge werden gleichzeitig ausgeführt und Lesevorgänge werden nicht blockiert, sodass dort keine Blockierung erfolgt Es kommt selten zu einer Sperrsituation.
- Dies führt zu einem weiteren Problem: Neuer Code, große Datenverkehrsszenarien, Prozesse, die in der Warteschlange stehen, um Cache-Opcode-Vorgänge auszuführen, führen zu einer Verschwendung von Ressourcen.
- 4. OPCache-Cache-Interpretation
- OPCache ist die offizielle Opcode-Cache-Lösung. Nach der PHP5.5-Version wurde sie in den PHP-Quellcode gepackt und gemeinsam veröffentlicht.
- Es speichert den durch die PHP-Kompilierung generierten Bytecode und die Daten im gemeinsamen Speicher. Bei jeder Anfrage wird der kompilierte Opcode direkt aus dem Cache gelesen und ausgeführt.
4.1 OPCode-Cache
Opcache speichert OPCode und den folgenden Inhalt:- Funktion im PHP-Skript
- Klasse im PHP-Skript definiert
- Pfad der PHP-Skriptdatei
- PHP-Skript OPArray
- eigene Struktur/Inhalt des PHP-Skripts
4.2 Interner String-Cache
Zuerst müssen wir Verstehe, was ist Interned String?
In PHP5.4 wurde der Interned String-Mechanismus eingeführt, um die Speicherung und Verarbeitung von Strings durch PHP zu optimieren.
Vor allem beim Umgang mit großen String-Blöcken, wie z. B. PHP-Dokumenten, kann Interned String den Speicher optimieren.
Der intern zwischengespeicherte String-Inhalt umfasst: Variablennamen, Klassennamen, Methodennamen, Zeichenfolgen, Kommentare usw.
Im PHP-FPM-Modus sind internierte String-Cache-Zeichen auf den Worker-Prozess beschränkt.
Bei Zwischenspeicherung im OPCache kann die zwischengespeicherte Zeichenfolge „Interned String“ zwischen Worker-Prozessen verwendet werden, um Speicher zu sparen.
Auf eines müssen wir achten: In der PHP-Entwicklung gibt es normalerweise große Kommentarabschnitte, die auch im OPCache zwischengespeichert werden.
Sie können das Zwischenspeichern von Kommentaren über die Konfiguration von php.ini deaktivieren.
In Frameworks wie dem Zend Framework referenziert jedoch Annotationen, daher muss die Frage, ob das Caching von Annotationen deaktiviert werden soll, anders gehandhabt werden.
5. OPCache-Update-Strategie
ist ein Cache, der Ablauf- und Update-Strategien hat.
Die Update-Strategie von OPCache ist sehr einfach. Die abgelaufenen Daten werden auf „Verschwendet“ gesetzt. Wenn der eingestellte Wert erreicht ist, wird der Cache geleert und neu erstellt.
Hinweis hier: In Szenarien mit hohem Datenverkehr ist der Neuaufbau des Caches eine sehr ressourcenintensive Aufgabe.
OPCache verhindert nicht, dass andere Prozesse beim Erstellen des Caches lesen.
Dies führt dazu, dass eine große Anzahl von Prozessen immer wieder neue Caches erstellt. Deshalb: Stellen Sie die OPCache-Ablaufzeit nicht ein
Jedes Mal, wenn Sie neuen Code veröffentlichen, wird der Cache wiederholt erstellt. Wie kann man es vermeiden?
- Geben Sie während Spitzenzeiten keinen Code frei , dies ist eine Regel, die unter allen Umständen befolgt werden muss
- Code-Aufwärmphase, z. B. die Verwendung von Skripten zur Stapelanpassung von PHP-Zugriffs-URLs oder die Verwendung von APIs, die von bereitgestellt werden OPCache wie
opcache_compile_file ()
Kompilierungs-Caching durchführenopcache_compile_file()
进行编译缓存
6. OPCache 的配置
6.1 内存配置
-
opcache.preferred_memory_model="mmap"
OPcache 首选的内存模块。如果留空,OPcache 会选择适用的模块, 通常情况下,自动选择就可以满足需求。可选值包括:mmap
,shm
,posix
以及win32
。 -
opcache.memory_consumption=64
OPcache 的共享内存大小,以兆字节为单位,默认64M
-
opcache.interned_strings_buffer=4
用来存储临时字符串的内存大小,以兆字节为单位,默认4M
-
opcache.max_wasted_percentage=5
浪费内存的上限,以百分比计。 如果达到此上限,那么 OPcache 将产生重新启动续发事件。默认5
6.2 允许缓存的文件数量以及大小
-
opcache.max_accelerated_files=2000
OPcache 哈希表中可存储的脚本文件数量上限。 真实的取值是在质数集合{ 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 }
中找到的第一个大于等于设置值的质数。 设置值取值范围最小值是200
,最大值在 PHP 5.5.6 之前是100000
,PHP 5.5.6 及之后是1000000
。默认值2000
-
opcache.max_file_size=0
以字节为单位的缓存的文件大小上限。设置为 0 表示缓存全部文件。默认值0
6.3 注释相关的缓存
-
opcache.load_comments
boolean
如果禁用,则即使文件中包含注释,也不会加载这些注释内容。 本选项可以和opcache.save_comments
一起使用,以实现按需加载注释内容。 opcache.fast_shutdown
6.1 Speicherkonfiguration
🎜🎜 🎜opcache. Preferred_memory_model="mmap"
OPcache bevorzugtes Speichermodul. Wenn das Feld leer bleibt, wählt OPcache das entsprechende Modul aus. Normalerweise reicht die automatische Auswahl aus. Zu den optionalen Werten gehören: mmap
, shm
, posix
und win32
. 🎜🎜opcache.memory_consumption=64
Die gemeinsam genutzte Speichergröße von OPcache, in Megabyte, standardmäßig 64M
🎜🎜opcache.interned_strings_buffer=4
Die Speichergröße Wird zum Speichern temporärer Zeichenfolgen verwendet, in Megabyte, Standard 4M
🎜🎜opcache.max_wasted_percentage=5
Die Obergrenze des verschwendeten Speichers, in Prozent. Wenn dieses Limit erreicht ist, generiert OPcache ein Neustartereignis. Standardwert 5
🎜🎜🎜🎜6.2 Anzahl und Größe der Dateien, die zwischengespeichert werden dürfen🎜🎜🎜🎜🎜opcache.max_accelerated_files=2000
OPcache-Hash Tabelle Die maximale Anzahl von Skriptdateien, die in gespeichert werden können. Der tatsächliche Wert ist die erste Primzahl im Primzahlensatz { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987
, die größer oder gleich ist Wert einstellen. Der minimale Wertebereich des Einstellungswerts ist 200
, der maximale Wert vor PHP 5.5.6 ist 100000
und PHP 5.5.6 und höher ist 1000000 Code> . Standardwert <code>2000
🎜🎜opcache.max_file_size=0
Die maximale Dateigröße des Caches in Bytes. Auf 0 setzen, um alle Dateien zwischenzuspeichern. Standardwert 0 Kommentare und deren Inhalte werden nicht geladen. Diese Option kann zusammen mit opcache.save_comments
verwendet werden, um Kommentarinhalte bei Bedarf zu laden. 🎜🎜opcache.fast_shutdown
boolean Wenn aktiviert, werden Fast-Stop-Resume-Ereignisse verwendet. Das sogenannte Quick-Stop-Resumption-Ereignis bezieht sich auf das Speicherverwaltungsmodul, das auf der Zend-Engine basiert, um den Speicher aller angeforderten Variablen auf einmal freizugeben, anstatt jeden zugewiesenen Speicherblock nacheinander freizugeben. 🎜🎜🎜🎜🎜6.4 Cache-Konfiguration der zweiten Ebene🎜🎜🎜-
opcache.file_cache
Konfigurieren Sie das Cache-Verzeichnis der zweiten Ebene und aktivieren Sie den Cache der zweiten Ebene. Durch die Aktivierung des L2-Cache kann die Leistung verbessert werden, wenn der SHM-Speicher voll ist, der Server neu gestartet oder der SHM zurückgesetzt wird. Der Standardwert ist die leere Zeichenfolge""
, die das dateibasierte Caching deaktiviert.opcache.file_cache
配置二级缓存目录并启用二级缓存。 启用二级缓存可以在 SHM 内存满了、服务器重启或者重置 SHM 的时候提高性能。 默认值为空字符串""
,表示禁用基于文件的缓存。 -
opcache.file_cache_only
boolean
启用或禁用在共享内存中的 opcode 缓存。 -
opcache.file_cache_consistency_checks
boolean
当从文件缓存中加载脚本的时候,是否对文件的校验和进行验证。 -
opcache.file_cache_fallback
boolean
在 Windows 平台上,当一个进程无法附加到共享内存的时候, 使用基于文件的缓存,也即:opcache.file_cache_only=1
opcache.file_cache_only
boolean
Opcode-Caching im gemeinsam genutzten Speicher aktivieren oder deaktivieren. opcache.file_cache_consistency_checks
boolean
Ob die Prüfsumme der Datei überprüft werden soll, wenn das Skript aus dem Dateicache geladen wird. opcache.file_cache_fallback
boolean
Wenn ein Prozess auf Windows-Plattformen keine Verbindung zum gemeinsam genutzten Speicher herstellen kann, wird ein dateibasierter Cache verwendet, das heißt: opcache_only =1
. Das Datei-Caching muss explizit aktiviert werden.
Das obige ist der detaillierte Inhalt vonAusführliche Analyse der Funktionsweise von PHP Opcache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

Die Anmeldung bei CakePHP ist eine sehr einfache Aufgabe. Sie müssen nur eine Funktion verwenden. Sie können Fehler, Ausnahmen, Benutzeraktivitäten und von Benutzern durchgeführte Aktionen für jeden Hintergrundprozess wie Cronjob protokollieren. Das Protokollieren von Daten in CakePHP ist einfach. Die Funktion log() wird bereitgestellt

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP ist ein Open-Source-MVC-Framework. Es erleichtert die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich. CakePHP verfügt über eine Reihe von Bibliotheken, um die Überlastung der häufigsten Aufgaben zu reduzieren.
