Heim > Artikel > Backend-Entwicklung > Was ist OPCache? Wie verwende ich OPCache, um die PHP-Leistung zu verbessern?
Dieser Artikel stellt Ihnen OPCache vor und stellt detailliert vor, wie Sie OPCache verwenden, um die Leistung von PHP zu verbessern. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Bei einer interpretierten Sprache wie PHP wird der gesamte Code bei jeder Ausführung geladen und analysiert. Einerseits besteht der Vorteil darin, dass der Code jederzeit im laufenden Betrieb aktualisiert und geändert werden kann, da wir dies tun muss nicht kompiliert werden. Dies bringt jedoch auch ein Problem mit sich, nämlich dass übermäßiger Datenverkehr nicht bewältigt werden kann. Denn jedes Mal, wenn es geladen, analysiert und freigegeben wird, erhöht sich die Belastung der CPU. Normalerweise kann ein 8-Kern-16G-Server bei etwa 2000 oder 3000 Parallelitäten eine CPU-Auslastung von mehr als 60 % erreichen. Und wenn Sie ein großes Framework wie Laravel verwenden, wird die Effizienz noch geringer sein. Zu diesem Zeitpunkt erhöhen wir normalerweise die Anzahl der Server für den Lastausgleich, um den Serverdruck zu verringern. Allerdings werden die Kosten dafür deutlich steigen. Gibt es Optimierungslösungen?
In einem Artikel über PHP7-Optimierung von Bruder Niao in seinem Blog lautet der erste Vorschlag, OPcache zu aktivieren. Eine andere Möglichkeit ist natürlich auch die Verwendung von Swoole. Wir werden in Zukunft über Swoole sprechen. Heute werden wir zuerst OPcache lernen.
OPcache verbessert die Leistung von PHP, indem es den vorkompilierten Bytecode von PHP-Skripten im gemeinsamen Speicher speichert. Der Vorteil der Speicherung von vorkompiliertem Bytecode besteht darin, dass PHP nicht jedes Mal geladen und analysiert werden muss, wenn ein Skriptaufwand entsteht.
Dies ist eine Einführung in OPcache in der PHP-Dokumentation. Mit anderen Worten, OPcache speichert jedes Mal die Schritte des Ladens und Parsens und speichert den ersten analysierten und kompilierten Skript-Bytecode im gemeinsamen Speicher des Systems. Tatsächlich ähnelt dies einer unvollständigen Zusammenstellung.
Sprachen wie Java müssen gepackt und kompiliert werden, bevor sie online ausgeführt werden können, z. B. durch Packen in ein JAR-Paket. C++ oder C# können in eine DLL oder EXE gepackt werden. Bei diesen gepackten Dateien handelt es sich um kompilierte Dateien. Nach ihrer Ausführung bleiben sie im Allgemeinen weiterhin aktiv, das heißt, sie werden zu einem residenten Prozess und ihr Code gelangt in den Speicher. Wenn das Programm ausgeführt wird, ist keine Interpretation oder Kompilierung erforderlich, sodass die Geschwindigkeit natürlich viel höher ist. Auch OPcache spielt eine ähnliche Rolle. Es handelt sich jedoch nicht um einen vollständigen Kompilierungsprozess, um das Skript auszuführen. Nach dem Einschalten von OPcache durchsucht PHP-FPM jedoch zunächst, ob bereits relevanter zwischengespeicherter Bytecode vorhanden ist auf den Speicher wird direkt zugegriffen, andernfalls wird er erneut interpretiert und kompiliert und zwischengespeichert. Darüber hinaus gilt OPcache für Dateien. Das heißt, wenn eine Datei neu hinzugefügt wird, wird sie nur dann zwischengespeichert, wenn sie ausgeführt wurde. Wenn sie nicht ausgeführt wurde, befindet sie sich nicht im aktuellen gemeinsam genutzten Speicher.
Empfohlenes Lernen: „PHP-Video-Tutorial“
OPcache ist bereits eine offizielle Erweiterung von PHP und wird mit dem Installationspaket veröffentlicht, sodass wir beim Kompilieren und Installieren von PHP --enable-opcache verwenden können Um die Erweiterung zu aktivieren, ist sie bereits die Standarderweiterung. Sie können die Dateien im Installationspaket auch verwenden, um OPcache auf Systemen zu installieren, auf denen OPcache nicht installiert ist.
cd php-7.4.4/ext/opcache/ phpize ./configure make && make install
Es ist zu beachten, dass OPcache und Xdebug nicht zusammen in einer Produktionsumgebung verwendet werden sollten. Xdebug selbst wird nicht für die Verwendung in einer Produktionsumgebung empfohlen. Wenn Sie es gleichzeitig verwenden müssen, müssen Sie zuerst OPcache und dann Xdebug laden.
Nachdem die Erweiterung installiert ist, öffnen Sie die Erweiterung in der Datei php.ini. Es ist zu beachten, dass es sich bei der OPcache-Erweiterung um ein Zend-Erweiterungspaket handelt. Wir müssen also die Zend-Erweiterung öffnen.
zend_extension=opcache.so
Außerdem muss es aktiviert werden.
opcache.enable=1
Wenn OPcache aktiviert ist und wir den Code aktualisieren, werden wir feststellen, dass der Code, den wir gerade aktualisiert haben, nicht unser aktueller Code ist. Dies liegt daran, dass der Code wie bei Java zwischengespeichert wurde und wir den Dienst neu starten müssen. Was also startet PHP hier neu? Natürlich starten Sie einfach unser PHP-FPM neu. Verwenden Sie einfach den Befehl kill -USR2, um den Hauptprozess neu zu starten. Hier wird auch ein schneller Neustartbefehl gegeben.
ps -ef | grep "php-fpm: master" | grep -v grep | cut -c 9-15 | xargs kill -USR2
Vielen Dank an den Zhihu-Chef für die Korrektur. Ein Neustart von PHP-FPM ist nicht die beste Lösung. Sie sollten opcache_reset() verwenden, um manuell neu zu starten, oder opcache.validate_timestamps + opcache.revalidate_freq über die Datei php.ini konfigurieren In regelmäßigen Abständen kompilieren oder über opcache_compile_file() die geänderte Datei direkt neu kompilieren
Der Inhalt unseres Tests ist ein 2-Core-4G-Server in der Testumgebung. Die verwendete PHP-Version ist PHP7.4 , normale Nginx- und PHP-Konfiguration, ulimit wird ebenfalls maximal geöffnet. Der Code gibt einfach eine Textzeile aus, aber wir verwenden ein einfaches MVC-Framework, was bedeutet, dass dieser Code beim Ausführen mindestens mehrere Dateien lädt und nicht nur eine.
首先我们来看未开启 OPcache 的情况。
接下来是开启了 OPcache 的情况。
很明显,性能有了很大的提高。不仅速度快了很多,吞吐率也是直接上升了几倍。当然,这只是非常简单的一个测试,不过总体看来,确实对单机的性能提升有很大的帮助。最最主要的是,同样的并发情况下,CPU 资源也比未开启的状态下低了70%。
在 PHP 的官方文档中,已经为我们给出了一套默认的 OPcache 在 php.ini 中的配置。经过测试,基本没什么问题,当然,现在还没有在生产环境中使用过,还需要进行更多的测试。不过文档中指出,这套配置是可以直接运用到线上的,不过需要注意的是某些使用了注解之类功能的高级框架可能需要注意某些参数。
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
具体的配置说明以及其他的一些配置选项我们可以参考官方文档进行详细的了解。
既然是我们的 PHP 大神鸟哥推荐的,而且也是官方推荐的扩展,我觉得在正式生产环境中使用不会有太大问题。另外,官方也给出了一套可以直接运用于线上生产环境的配置参数,也方便我们直接在线上进行测试。目前在生产环境中,我们只使用了一台服务器来进行测试,并且给它多分配了一些负载过来,从目前的情况来看,这一台机器的运行效率比其他几台的高很多。因为它一方面处理了更多的请求,另一方面它的 CPU 资源占用率还没有其他几台机器高。同时,OPcache 也不需要我们去了解更多的进程协程之类的知识,不像 Swoole 一样的会带来更高的学习成本。所以综上所述,在测试完备的情况下,OPcache 绝对是我们最优先考虑的单机优化方案。
更多编程相关知识,请访问:编程入门!!
Das obige ist der detaillierte Inhalt vonWas ist OPCache? Wie verwende ich OPCache, um die PHP-Leistung zu verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!