Heim  >  Artikel  >  Backend-Entwicklung  >  Tipps zur Verbesserung der PHP7-Leistung mithilfe der OPcache-Erweiterung

Tipps zur Verbesserung der PHP7-Leistung mithilfe der OPcache-Erweiterung

coldplay.xixi
coldplay.xixinach vorne
2021-02-11 10:18:012620Durchsuche

Tipps zur Verbesserung der PHP7-Leistung mithilfe der OPcache-Erweiterung

Empfohlen (kostenlos): PHP7

Egal wo ich bin, ich werde Ihnen sofort antworten, wenn ich die E-Mail sehe. Meine E-Mail: echo "YUBzYW1lZ28uY29tCg==" |. base64 -d
Vorwort
Es ist halb elf, es ist Zeit, sich niederzulassen.

Wenn PHP läuft, gibt es einen solchen Prozess. Der PHP-Code wird zunächst vorkompiliert, der Bytecode wird generiert und dann in den Speicher geladen. Schließlich führt die CPU das kompilierte Bytecode-Fragment im Speicher aus. Wir werden feststellen, dass wir bei der Ausführung eines PHP-Programms jedes Mal einen solchen Prozess durchlaufen. Ja, es ist leicht zu denken: Warum nicht der C++-Sprache folgen und den Quellcode in eine Datei kompilieren? kann direkt in den Speicher geladen werden, also Wo ist Bruder? Äh-huh?. Holen Sie Ihr Gewehr heraus und laden Sie diesen OPcache. Seit der Veröffentlichung von PHP5.5.0 ist diese Zend-Erweiterung integriert. OPcache。自从PHP5.5.0出来后,就内置此zend扩展了。


What is OPcache
OPcache是PHP中的Zend扩展,可以大大提升PHP的性能。
OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。


Judge whether it has been extended OPcache

➜  ~ php -m | grep OPcache
Zend OPcache
Zend OPcache

倘若没有开启的话,可以在php.ini配置中开启
/home/samego/service/php7.2/php.ini

➜  ~ echo zend_extension="opcache.so" >> /home/samego/service/php7.2/php.ini

About OPcache configure
接下来,我们需要在 PHP 的配置文件中启用 OPcache(默认是关闭的):

opcache.enable=1

下面我们继续对 OPcache 进行一些优化配置:

opcache.memory_consumption=512

这个配置表示你想要分配给 OPcache 的内存空间(单位:MB),设置一个大于 64 的值即可。

opcache.interned_strings_buffer=64

这个配置表示你想要分配给实际字符串的空间(单位:MB),设置一个大于 16 的值即可。

opcache.max_accelerated_files=32531

这个配置表示可以缓存多少个脚本,将这个值尽可能设置为与项目包含的脚本数接近(或更大)。

opcache.validate_timestamps=0

改配置值用于重新验证脚本,如果设置为 0(性能最佳),需要手动在每次 PHP 代码更改后手动清除 OPcache。如果你不想要手动清除,可以将其设置为 1 并通过 opcache.revalidate_freq 配置重新验证间隔,这可能会消耗一些性能,因为需要每隔 x 秒检查更改。

opcache.save_comments=1

这个配置会在脚本中保留注释,我推荐开启该选项,因为一些库依赖于这个配置,并且我也找不出什么关闭它的好处。

opcache.fast_shutdown=0

快速关闭会给一个更快速清理内存的机制,不过,在我的基准测试中,更慢一些,可能这会应用带来一些性能提升,但是你需要自己去尝试。

所以,最终的配置优化长这样:

opcache.enable=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=32531
opcache.validate_timestamps=0
opcache.save_comments=1
opcache.fast_shutdown=0

你可以使用这些配置值进行实验,具体配置值取决于你的应用大小和服务器配置。
学习于Laravel社区


Laravel OPcache

  • install

    ➜  ~ composer require appstract/laravel-opcache
  • configure

    ➜  ~ php artisan vendor:publish --provider="Appstract\Opcache\OpcacheServiceProvider" --tag="config"
  • command

# Clear OPcache:
➜  ~ php artisan opcache:clear

# Show OPcache config:
➜  ~ php artisan opcache:config

# Show OPcache status:
➜  ~ php artisan opcache:status

# Pre-compile your application code:
➜  ~ php artisan opcache:optimize

拭目以待的场景测试

个人比较喜欢数据说话
场景:(1)请求GET接口 (2)测试次数10  (3)并发数为100

case non-extension

1000个请求,花费32.32秒,每秒30.94个请求

Transactions:               1000 hits
Availability:             100.00 %
Elapsed time:              32.32 secs
Data transferred:           0.97 MB
Response time:              0.32 secs
Transaction rate:          30.94 trans/sec
Throughput:             0.03 MB/sec
Concurrency:                9.96
Successful transactions:        1000
Failed transactions:               0
Longest transaction:            0.44
Shortest transaction:           0.11

case had extend


Was ist OPcache?

OPcache ist eine Zend-Erweiterung in PHP, die die Leistung von PHP erheblich verbessern kann.

OPcache verbessert die Leistung von PHP, indem es den vorkompilierten Bytecode von PHP-Skripten im gemeinsam genutzten Speicher speichert. Der Vorteil der Speicherung von vorkompiliertem Bytecode besteht darin, dass der Aufwand für das Laden und Parsen von PHP-Skripten jedes Mal eingespart wird.


Beurteilen Sie, ob der OPcache erweitert wurde

Transactions:               1000 hits
Availability:             100.00 %
Elapsed time:               2.94 secs
Data transferred:           0.97 MB
Response time:              0.03 secs
Transaction rate:         340.14 trans/sec
Throughput:             0.33 MB/sec
Concurrency:                9.86
Successful transactions:        1000
Failed transactions:               0
Longest transaction:            0.29
Shortest transaction:           0.01
🎜Wenn er nicht aktiviert ist, können Sie ihn in der php.ini-Konfiguration aktivieren🎜/home/samego/service/php7.2/php.ini 🎜rrreee🎜🎜🎜Über die OPcache-Konfiguration🎜🎜Als nächstes müssen wir OPcache in der PHP-Konfigurationsdatei aktivieren (standardmäßig geschlossen): 🎜rrreee🎜 Als nächstes nehmen wir weiterhin einige Optimierungskonfigurationen für OPcache vor: 🎜rrreee🎜 Diese Konfiguration bedeutet: Der Speicherplatz (Einheit: MB), den Sie OPcache zuweisen möchten, legen Sie einfach einen Wert größer als 64 fest. 🎜rrreee🎜Diese Konfiguration gibt den Speicherplatz (Einheit: MB) an, den Sie der tatsächlichen Zeichenfolge zuweisen möchten. Legen Sie einfach einen Wert größer als 16 fest. 🎜rrreee🎜Diese Konfiguration gibt an, wie viele Skripte zwischengespeichert werden können. Stellen Sie diesen Wert so nah wie möglich an (oder größer als) der Anzahl der im Projekt enthaltenen Skripte ein. 🎜rrreee🎜Ändern Sie den Konfigurationswert für Revalidierungsskripte. Wenn er auf 0 (beste Leistung) eingestellt ist, müssen Sie den OPcache nach jeder Änderung des PHP-Codes manuell löschen. Wenn Sie keine manuelle Bereinigung wünschen, können Sie den Wert auf 1 setzen und das Revalidierungsintervall über opcache.revalidate_freq konfigurieren, was möglicherweise etwas Leistung kostet, da Änderungen alle x Sekunden überprüft werden müssen. 🎜rrreee🎜Diese Konfiguration behält Kommentare im Skript bei. Ich empfehle, diese Option zu aktivieren, da einige Bibliotheken von dieser Konfiguration abhängen und ich keinen Vorteil darin sehe, sie zu deaktivieren. 🎜rrreee🎜Schnelles Herunterfahren ermöglicht einen schnelleren Mechanismus zum Löschen des Speichers, in meinem Benchmark-Test ist es jedoch langsamer. Möglicherweise führt dies zu einer Leistungsverbesserung der Anwendung, aber Sie müssen es selbst ausprobieren. 🎜🎜Die endgültige Konfigurationsoptimierung sieht also so aus: 🎜rrreee🎜Sie können mit diesen Konfigurationswerten experimentieren, die von Ihrer Anwendungsgröße und Serverkonfiguration abhängen. 🎜Lernen Sie von der Laravel-Community🎜
🎜🎜Laravel OPcache🎜🎜
  • 🎜install🎜rrreee
  • 🎜configure🎜rrreee
  • 🎜 Befehl 🎜
rrreee🎜🎜Stehen Sie hin und sehen Sie sich den Szenariotest an🎜🎜🎜🎜Persönlich bevorzuge ich Daten gegenüber Gesprächen🎜Szenario: (1) Fordern Sie die GET-Schnittstelle an (2) Die Anzahl der Tests beträgt 10 ( 3) Die Anzahl der Parallelitäten beträgt 100 🎜🎜🎜1000 Anfragen, Kosten 2,94 Sekunden, 340,14 Anfragen pro Sekunde🎜🎜rrreee🎜🎜Wenn ich diesen Datensatz sehe, bin ich sehr glücklich, extrem glücklich. In Bezug auf die Leistung gibt es einen so starken Kontrast, dass ich nichts sagen werde ~ OPcache hat Recht🎜🎜                                

Das obige ist der detaillierte Inhalt vonTipps zur Verbesserung der PHP7-Leistung mithilfe der OPcache-Erweiterung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen