Trenutno stanje: PHP2Shell. Dvije kritične PHP ranjivosti (CVSS 9.2) omogućuju zlonamjerni kod bez prijave. Zakrpe od 21. 10. 2026.Što sada učiniti →

JIT i performanse u PHP-u 8

JIT kompilator prevodi PHP u strojni kod od verzije 8.0. Za tipične web-stranice donosi malo; više donose OPcache, aktualne verzije i uredna konfiguracija.

Stanje 4 min čitanjaPHP znanje

Ukratko: PHP JIT (just-in-time kompilator) često izvršavani PHP kod tijekom rada prevodi u strojni kod. Stigao je s PHP-om 8.0, dio je OPcachea i od PHP-a 8.4 prema zadanim je postavkama isključen. Računski zahtjevni zadaci time postaju znatno brži, a tipične web-stranice poput WordPressa jedva. Veći dobitak donose OPcache, aktualna verzija PHP-a i prikladno podešeno upravljanje procesima, a svaka aktualna verzija istodobno donosi potrebne sigurnosne ispravke.

Što je JIT kompilator u PHP-u?

PHP je interpretirani jezik: izvorni se tekst najprije prevodi u bytecode, takozvane opcodeove, a njih izvršava Zend Engine. JIT ide korak dalje. Promatra koji se dijelovi koda često izvršavaju i upravo ih prevodi u strojni kod za procesor. Od tada se izvršavaju bez zaobilaznog puta preko interpretera.

RFC o uvođenju opisuje JIT kao gotovo samostalan dio OPcachea. Stvoreni strojni kod nalazi se u dodatnom području zajedničke memorije OPcachea. S PHP-om 8.4 projekt je JIT iznova izgradio; prema stranici izdanja nova se implementacija temelji na IR frameworku, zajedničkom međuprikazu za generiranje koda. Kako motor radi ispod toga, objašnjava Zend Engine.

Najprije OPcache: prava osnova performansi

Bez OPcachea PHP svaku datoteku iznova prevodi pri svakom zahtjevu. OPcache bytecode čuva u zajedničkoj memoriji tako da ga svi workeri ponovno koriste. Za web-stranicu sa sustavom za upravljanje sadržajem to je daleko najvažnija poluga. Od PHP-a 8.5 OPcache je prema prihvaćenom RFC-u čvrsto ugrađen u PHP; poznate ini postavke i dalje upravljaju time je li predmemorija aktivna.

Važne zadane vrijednosti prema priručniku: opcache.enable=1, opcache.enable_cli=0, opcache.validate_timestamps=1 i opcache.revalidate_freq=2. Prema posljednjoj postavci OPcache najviše svake dvije sekunde provjerava jesu li se datoteke promijenile. Tko isključi validate_timestamps, mora nakon svakog deploymenta isprazniti predmemoriju ili ponovno pokrenuti PHP. Više u članku OPcache objašnjen.

Konfiguriranje PHP JIT-a: načini i postavke

JIT se kontrolira dvjema direktivama:

Direktiva Zadano od 8.4 Zadano prije 8.4 Značenje
opcache.jit disable tracing način rada JIT-a
opcache.jit_buffer_size 64M 0 memorija za stvoreni strojni kod, 0 isključuje JIT

Za opcache.jit priručnik poznaje ove vrijednosti: disable (potpuno isključeno, tijekom izvođenja ne može se uključiti), off (isključeno, ali se tijekom izvođenja može uključiti), tracing odnosno on (preporučeno za većinu korisnika) i function. Uz to postoji četveroznamenkasti brojčani zapis za fina podešavanja.

; JIT ciljano uključiti, npr. za računski zahtjevne workere
opcache.enable=1
opcache.jit=tracing
opcache.jit_buffer_size=64M

Radi li JIT, pokazuje status OPcachea:

php -i | grep -i "opcache.jit"          # postavke CLI-ja
php --ri "Zend OPcache"                 # konfiguracija ekstenzije OPcache

Imajte na umu da naredbeni redak može koristiti druge postavke nego PHP-FPM. Za web-rad vrijedi izlaz phpinfo() u FPM kontekstu, idealno pozvan samo interno i nakon toga uklonjen.

Što JIT donosi u praksi?

Autori RFC-a mjerili su: sintetička skripta bench.php s JIT-om je radila više nego dvostruko brže. Kod stvarnih aplikacija dobitak je bio malen; WordPress je postigao 326 umjesto 315 zahtjeva u sekundi, a PHP parser radio je otprilike 1,3 puta brže. RFC otvoreno kaže da JIT ne ubrzava znatno stvarne aplikacije poput WordPressa.

Razlog je u profilu tipičnih web-aplikacija. Većinu vremena čekaju na bazu podataka, datotečni sustav ili vanjske usluge. Brži put procesora tu malo pomaže. Koristi, naprotiv, mogu imati obrada slika u PHP-u, matematički izračuni, parseri ili dugotrajni workeri.

Performanse bez JIT-a: učinkovitije poluge

Za web-stranice poduzeća i shopove isplati se ovaj redoslijed:

  1. Aktualna verzija PHP-a: nove verzije donose optimizacije i prije svega sigurnosne ispravke.
  2. Ispravno dimenzionirati OPcache: dovoljno memorije i mjesta za sve datoteke aplikacije.
  3. Prikladno podesiti PHP-FPM: pm.max_children prilagoditi dostupnoj radnoj memoriji, umjesto da se slijepo povećava.
  4. Provjeriti bazu podataka: pronaći spore upite, postaviti indekse.
  5. Predmemoriranje na razini aplikacije: predmemorija stranica ili objekata, gdje sustav to podržava.
  6. Mjeriti umjesto nagađati: request_slowlog_timeout u PHP-FPM-u za spore zahtjeve zapisuje backtrace u slowlog.

JIT, performanse i sigurnost

Performanse i sigurnost povezani su tješnje nego što se čini. Prvo: svaka dodatna komponenta dodatan je kod. RFC o uvođenju sâm navodi rizik pogrešaka u JIT-u, u generiranju koda i dodjeli registara, te teže traženje pogrešaka. Tko JIT ne treba mjerljivo, ostavlja ga na zadanom disable.

Drugo: OPcache i workeri drže kod u memoriji. Nakon sigurnosnog ažuriranja poput onog za PHP2Shell stari procesi sa starim kodom nastavljaju raditi dok se ponovno ne pokrenu. Samo pražnjenje predmemorije ne zamjenjuje to ponovno pokretanje jer ranjivosti CVE-2026-109618 i CVE-2026-109619 leže u samoj PHP binarnoj datoteci.

Treće: najbolji dobitak performansi, aktualna verzija, istodobno je i najvažnija zaštitna mjera. PHP 8.2 dosiže kraj podrške 31. 12. 2026.; tko sada prijeđe na 8.4 ili 8.5, dobiva oboje. Kako sustave trajno održavamo brzima i ojačanima, opisuje ojačavanje poslužitelja za PHP web-poslužitelje.

Kako PHP SOS konkretno pomaže?

  • Analiza postojećeg stanja: Očitavamo postavke OPcachea, JIT-a i FPM-a i uspoređujemo ih s opterećenjem i radnom memorijom.
  • Mjerenje uskih grla: Slowlogom i pokazateljima poslužitelja pronalazimo gdje se vrijeme stvarno gubi.
  • Sigurna konfiguracija: JIT samo gdje dokazano pomaže; OPcache tako da deploymenti i ažuriranja uredno djeluju.
  • Planirati ažuriranja: Promjene verzije s testom i dokumentiranim ponovnim pokretanjem, kako bi brzina i stanje zakrpa bili usklađeni.

Česta pitanja

Je li JIT u PHP-u prema zadanim postavkama aktivan?

Od PHP-a 8.4 više nije: zadana vrijednost opcache.jit je disable. Prije je bio postavljen tracing, ali je međuspremnik opcache.jit_buffer_size bio na 0, pa JIT također nije radio.

Ubrzava li JIT WordPress?

Jedva. Već u RFC-u o uvođenju autori pišu da JIT ne ubrzava znatno stvarne aplikacije poput WordPressa. Njihova izmjerena vrijednost porasla je s 315 na 326 zahtjeva u sekundi.

Treba li mi OPcache ako ne koristim JIT?

Da. OPcache sprema preveden bytecode u zajedničku memoriju i pri svakom zahtjevu štedi ponovno kompiliranje. To je za gotovo svaku PHP web-stranicu najvažnija poluga performansi. Od PHP-a 8.5 OPcache je čvrsto ugrađen u PHP.

Je li JIT sigurnosni rizik?

Više koda znači više mogućih pogrešaka. RFC o uvođenju sâm navodi rizik pogrešaka u JIT-u i teže traženje pogrešaka. Tko ga ne treba, neka ga ostavi isključenim; tko ga koristi, trebao bi osobito brzo instalirati ažuriranja.

Izvori

Hitni kontakt

Svaki sat se računa. Pišite nam odmah.

Ukratko opišite sustav, verziju PHP-a i opažanje. Javit ćemo Vam se, razjasniti situaciju i raditi na daljinu dok incident nije zaključen i dokumentiran.

Hitna pomoć