PHP OPcache a Nette 4.0 zkušenosti s reálným použitím
- m.brecher
- Generous Backer | 828
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
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
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
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)