Aktuálna situácia: PHP2Shell. Dve kritické zraniteľnosti PHP (CVSS 9.2) umožňujú spustenie škodlivého kódu bez prihlásenia. Záplaty od 21. 10. 2026.Čo treba urobiť teraz →

JIT a výkon v PHP 8

Kompilátor JIT prekladá PHP od verzie 8.0 do strojového kódu. Pre typické weby prináša málo; viac prinášajú OPcache, aktuálne verzie a čistá konfigurácia.

Stav 4 min čítaniaZnalosti o PHP

Stručne: PHP JIT (just-in-time kompilátor) prekladá často vykonávaný kód PHP za behu do strojového kódu. Prišiel s PHP 8.0, je súčasťou OPcache a od PHP 8.4 je štandardne vypnutý. Výpočtovo náročné úlohy sa tak výrazne zrýchlia, typické weby ako WordPress sotva. Väčší zisk prinášajú OPcache, aktuálna verzia PHP a vhodne nastavená správa procesov, a každá aktuálna verzia prináša zároveň potrebné bezpečnostné opravy.

Čo je kompilátor JIT v PHP?

PHP je interpretovaný jazyk: zdrojový text sa najprv preloží do bytecode, takzvaných opcódov, a tie vykonáva Zend Engine. JIT ide o krok ďalej. Sleduje, ktoré časti kódu bežia často, a práve tie preloží do strojového kódu pre procesor. Odvtedy bežia bez obchádzky cez interpreter.

RFC k zavedeniu opisuje JIT ako takmer samostatnú súčasť OPcache. Vygenerovaný strojový kód leží v dodatočnej oblasti zdieľanej pamäte OPcache. S PHP 8.4 projekt JIT prebudoval; podľa stránky vydania je nová implementácia založená na frameworku IR, spoločnej medzireprezentácii pre generovanie kódu. Ako funguje engine pod tým, vysvetľuje Zend Engine.

Najprv OPcache: skutočný základ výkonu

Bez OPcache PHP preloží každý súbor pri každej požiadavke odznova. OPcache uchováva bytecode v zdieľanej pamäti, takže ho všetci workeri znovu používajú. Pre web so systémom správy obsahu je to zďaleka najdôležitejšia páka. Od PHP 8.5 je OPcache podľa prijatého RFC pevne skompilovaná v PHP; známe nastavenia ini naďalej riadia, či je cache aktívna.

Dôležité štandardné hodnoty podľa príručky: opcache.enable=1, opcache.enable_cli=0, opcache.validate_timestamps=1 a opcache.revalidate_freq=2. Pri poslednom nastavení OPcache kontroluje najviac každé dve sekundy, či sa súbory zmenili. Kto validate_timestamps vypne, musí po každom nasadení vyprázdniť cache alebo reštartovať PHP. Viac v OPcache vysvetlená.

Konfigurácia PHP JIT: režimy a nastavenia

JIT sa riadi dvoma direktívami:

Direktíva Štandard od 8.4 Štandard pred 8.4 Význam
opcache.jit disable tracing Režim JIT
opcache.jit_buffer_size 64M 0 Pamäť pre vygenerovaný strojový kód, 0 vypína JIT

Pre opcache.jit pozná príručka tieto hodnoty: disable (úplne vypnuté, za behu sa nedá zapnúť), off (vypnuté, ale za behu zapnuteľné), tracing, resp. on (odporúčané pre väčšinu používateľov) a function. Okrem toho existuje štvorciferný číselný zápis na jemné nastavenia.

; JIT zapnúť cielene, napr. pre výpočtovo náročné workery
opcache.enable=1
opcache.jit=tracing
opcache.jit_buffer_size=64M

To, či JIT beží, ukazuje stav OPcache:

php -i | grep -i "opcache.jit"          # nastavenia CLI
php --ri "Zend OPcache"                 # konfigurácia rozšírenia OPcache

Majte na pamäti, že príkazový riadok môže používať iné nastavenia než PHP-FPM. Pre webovú prevádzku je rozhodujúci výstup phpinfo() v kontexte FPM, ideálne vyvolaný iba interne a potom opäť odstránený.

Čo JIT prináša v praxi?

Autori RFC merali: syntetický skript bench.php bežal s JIT viac než dvakrát rýchlejšie. Pri reálnych aplikáciách bol zisk malý; WordPress dosiahol 326 namiesto 315 požiadaviek za sekundu, parser PHP bežal približne 1,3-krát rýchlejšie. RFC otvorene hovorí, že JIT reálne aplikácie ako WordPress výrazne nezrýchľuje.

Dôvod je v profile typických webových aplikácií. Väčšinu času čakajú na databázu, súborový systém alebo externé služby. Rýchlejšia cesta procesora tam pomáha málo. Profitovať naopak môže spracovanie obrazu v PHP, matematické výpočty, parsery alebo dlho bežiace workery.

Výkon bez JIT: účinnejšie páky

Pre firemné weby a obchody sa oplatí toto poradie:

  1. Aktuálna verzia PHP: Nové verzie prinášajú optimalizácie a predovšetkým bezpečnostné opravy.
  2. Správne dimenzovať OPcache: dostatok pamäte a miesta pre všetky súbory aplikácie.
  3. Vhodne nastaviť PHP-FPM: pm.max_children prispôsobiť dostupnej operačnej pamäti, namiesto slepého zvyšovania.
  4. Skontrolovať databázu: nájsť pomalé dotazy, nastaviť indexy.
  5. Caching na úrovni aplikácie: cache stránok alebo objektov, kde to systém podporuje.
  6. Merať namiesto hádať: request_slowlog_timeout v PHP-FPM zapisuje pri pomalých požiadavkách backtrace do slowlogu.

JIT, výkon a bezpečnosť

Výkon a bezpečnosť spolu súvisia tesnejšie, než sa zdá. Po prvé: každá ďalšia súčasť je ďalší kód. RFC k zavedeniu samo uvádza riziko chýb v JIT, pri generovaní kódu a prideľovaní registrov, ako aj ťažšie hľadanie chýb. Kto JIT meraním nepotrebuje, nechá ho na štandardnom disable.

Po druhé: OPcache a workery držia kód v pamäti. Po bezpečnostnej aktualizácii, ako pri PHP2Shell, bežia staré procesy so starým kódom ďalej, kým sa nereštartujú. Vyprázdnenie cache samotné tento reštart nenahrádza, pretože zraniteľnosti CVE-2026-109618 a CVE-2026-109619 sídlia priamo v binárke PHP.

Po tretie: najlepší zisk výkonu, aktuálna verzia, je zároveň najdôležitejším ochranným opatrením. PHP 8.2 dosiahne 31. 12. 2026 koniec podpory; kto teraz prejde na 8.4 alebo 8.5, získa oboje. Ako udržiavame systémy trvalo rýchle a zabezpečené, opisuje Zabezpečenie servera pre webové servery PHP.

Ako PHP SOS konkrétne pomáha?

  • Analýza súčasného stavu: Čítame nastavenia OPcache, JIT a FPM a porovnávame ich so záťažou a operačnou pamäťou.
  • Meranie úzkych miest: Pomocou slowlogu a ukazovateľov servera zisťujeme, kde sa čas skutočne stráca.
  • Bezpečná konfigurácia: JIT len tam, kde preukázateľne pomáha; OPcache tak, aby nasadenia a aktualizácie čisto zabrali.
  • Plánovanie aktualizácií: Zmeny verzií s testom a zdokumentovaným reštartom, aby sedelo tempo aj stav záplat.

Časté otázky

Je JIT v PHP štandardne aktívny?

Od PHP 8.4 už nie: štandardná hodnota opcache.jit je disable. Predtým bol prednastavený tracing, no vyrovnávacia pamäť opcache.jit_buffer_size bola nastavená na 0, takže JIT tiež nebežal.

Zrýchli JIT WordPress?

Sotva. Už v RFC k zavedeniu autori píšu, že JIT reálne aplikácie ako WordPress výrazne nezrýchľuje. Ich nameraná hodnota stúpla z 315 na 326 požiadaviek za sekundu.

Potrebujem OPcache, ak JIT nepoužívam?

Áno. OPcache ukladá preložený bytecode do zdieľanej pamäte a pri každej požiadavke šetrí opakované kompilovanie. Pre takmer každý web v PHP je to najdôležitejšia páka výkonu. Od PHP 8.5 je OPcache pevne zabudovaná v PHP.

Je JIT bezpečnostné riziko?

Viac kódu znamená viac možných chýb. RFC k zavedeniu samo uvádza riziko chýb v JIT a ťažšie hľadanie chýb. Kto ho nepotrebuje, nechá ho vypnutý; kto ho používa, mal by aktualizácie nasadzovať obzvlášť rýchlo.

Zdroje

Okamžitý kontakt

Každá hodina sa počíta. Napíšte nám hneď.

Stručne opíšte systém, verziu PHP a svoje pozorovanie. Ozveme sa, vyjasníme situáciu a budeme pracovať na diaľku, kým nebude incident uzavretý a zdokumentovaný.

Okamžitá pomoc