PHP OPcache a Nette 4.0 zkušenosti s reálným použitím

m.brecher
Generous Backer | 828
+
+1
-

Ahoj,

včera jsem objevil, že existuje nějaká OPcache v PHP, když jsem na webhostingu upgradoval z PHP 8.1 na PHP 8.2. Po upgrade stránky zrychlily o 100% až o 200%. Zkoumal jsem příčinu a zjistil, že Tracy Bar indikuje hodnotu OPcache 100%. Když jsem se vrátil zpět k PHP 8.1 Tracy indikoval OPcache 0% a stránky zpomalily. V obou verzích PHP 8.1 i PHP 8.2 byla OPcache v PHP instalována stejně, ale jenom ve verzi 8.2 se projevil efekt zvýšení výkonu.

Doma na Windows jsem v PHP OPcache aktivovanou v php.ini neměl a tak jsem OPcache aktivoval podle dokumentace:

Instalace OPcache na Windows
============================

a) vytvořit adresář pro cache soubory C:\www\_opcache

b) přidat ini_get('opcache.file_cache') do ini_set('open_basedir', ...) v Bootstrap.php - aby byl adresář writeble

nastavení v php.ini:
====================

c) Změnit ;zend_extension=opcache  na zend_extension="C:\Program Files\PHP82\ext\php_opcache.dll"

d) opcache.enable=1

e) opcache.enable_cli=1

f) opcache.memory_consumption=128

g) opcache.max_accelerated_files=4000      # může být až 10000

h) opcache.save_comments=1

i)  opcache.file_cache= "C:\www\_opcache"  # nutné pouze na Windows

j)  opcache.file_cache_fallback=1          # nutné jen na Windows

OPcache mě teď na Windows a PHP 8.2 funguje 100% a výkon Nette aplikací se zvednul o 100% až 200%.

Skokové zvýšení výkonu tedy bezpochyby způsobuje nikoliv verze PHP 8.2, ale fungující OPcache.

Podle dosahovaných časů vykreslených stránek v projektech s Nette na různých Linux webhostinzích, které se +/- pohybovaly okolo 100 ms, jsem ještě na webhostingu s PHP nikdy funkční OPcache nezažil. Vykreslovací časy stránky se na Linuxu s PHP 8.2 a 100% funkční OPcache pohybují v jiném rozsahu, cca 20ms až 40 ms – takovéto časy vidím poprvé v životě.

Rád bych získal od komunity nějaké komentáře o zkušenostech s OPcache, jestli je na webhostingových serverech běžně funkční/nefunkční a měl jsem jenom smůlu na špatné dodavatele, nebo jestli je tam nějaký problém s provozem OPcache na Linuxu a PHP <= 8.1 ??

Editoval m.brecher (7. 7. 2023 12:58)

Marek Bartoš
Nette Blogger | 1239
+
0
-

O jaký hosting šlo? Aby se mu ostatní mohli vyhnout. OPCache je pro provoz PHP must have.
Z českých hostingů vždy volím https://www.vas-hosting.cz, zejména kvůli managed VPS s root přístupem. Drobná sleva here VAS-HOSTING-AF4186

Ozzrel
Generous Backer | 52
+
+1
-

Bacha na to při vývoji je každá cache na škodu, protože tě přivede k šílenství až se věci přestanou měnit. Proto na dev/doma je nutno vypnout cache i OPcache. Ano doma to bude pomalejší. A míň nervů.

Na produkci po deploy musíš na serveru spustit opcache_reset() aby jí to promazalo. Jinak se taky změny neukážou a bude zase mrzení.

Marek Bartoš
Nette Blogger | 1239
+
+1
-

OPcache má ve výchozím nastavení automatickou invalidaci a to s dost krátkým časem pro opakovanou kontrolu. Není důvod ji lokálně vypínat.

Na serveru může být čas pro kontrolu nastavený delší, takže se může hodit opcache_reset() zavolat po nahrání souborů a promazání vygenerovaných PHP souborů v cache. Je nutné to ale udělat přes http request – nastavení PHP je pro webserver a konzoli oddělené a obvykle má konzole OPcache vypnutou.

Editoval Marek Bartoš (7. 7. 2023 14:32)

m.brecher
Generous Backer | 828
+
0
-

@MarekBartoš

Lepší webhosting plánuji již několik let, takže díky za tip.