Wie kann ich das Vorladen von Opcache in PHP 7.4 aktivieren?

9

Ich möchte das Opcache Preloading ( RFC ) auf meinen Produktionsservern mit PHP 7.4 aktivieren . Ich verwende Symfony , aber dies gilt für alle PHP.

emix
quelle
1
Ich bin mir nicht sicher, inwieweit reddit.com/r/PHP/comments/e8pgzi/… die Nutzungspläne beeinflusst.
Nigel Ren
2
Symfony beim
Vorladen
1
Überprüfen Sie diesen Artikel . Lesen Sie auch den Fehler, den Nigel gepostet hat, da er vorerst ziemlich kritisch erscheint.
Jeto

Antworten:

4

Zunächst sollten Sie hinzufügen:

opcache.preload=/path/to/project/preload.php

zu deinem php.ini

Dann sollten Sie in Ihrem PHP-Skript opcache_compile_file($file);jede Datei übergeben, die Sie vorinstallieren möchten.

MorganFreeFarm
quelle
4

Laut dem Blog-Beitrag scheint dies trivial zu sein. Anscheinend generiert Symfony seit 4.4 ein Preload-Skript, das eingestellt werden muss in php.ini:

opcache.preload=/path/to/project/var/cache/prod/App_KernelProdContainer.preload.php

Ich habe einige Tests in meiner lokalen Docker-Umgebung durchgeführt und so ging es:

PHP 7.3 ohne OPcache (aktuell)

Requests per second:    8.75 [#/sec] (mean)
Time per request:       114.402 [ms] (mean)

PHP 7.4 ohne OPcache

Requests per second:    11.44 [#/sec] (mean)
Time per request:       87.417 [ms] (mean)

PHP 7.4 mit OPcache ohne Vorladen (Apache + Modphp)

Requests per second:    30.25 [#/sec] (mean)
Time per request:       33.053 [ms]

PHP 7.4 mit OPcache ohne Vorladen (nginx + php fpm)

Requests per second:    40.00 [#/sec] (mean)

Leider konnte ich das Vorladen nicht aktivieren :( Ich habe folgende Fehler festgestellt (sowohl in Apache + Mod als auch in Nginx + FPM):

double free or corruption (!prev)
child pid 17 exit signal Aborted (6), possible coredump (…)

Diese Funktion sieht jedoch wie eine WIP aus . Ich werde diese Antwort erneut validieren, wenn ich diese Vorladefunktion verwenden kann. Insgesamt bin ich ziemlich beeindruckt, + 30% Leistung nur durch ein Upgrade von PHP 7.3auf 7.4.

emix
quelle