Kas yra PHP-FPM ir kaip jis veikia?

Autorius: Paskelbta

Trumpai: PHP-FPM (FastCGI Process Manager) – tai procesų, vykdančių PHP kodą serveryje, tvarkyklė. Ji veikia kartu su žiniatinklio serveriu ir valdo darbinius procesus, kurie gali apdoroti tolesnes užklausas kiekvieną kartą iš naujo nepaleidžiant interpretatoriaus. Tai padeda sklandžiai aptarnauti svetaines, pavyzdžiui, sukurtas naudojant WordPress, tačiau savaime negarantuoja trumpesnio įkėlimo laiko – svarbūs ir programos kodas, duomenų bazė bei turimi ištekliai.

Kaip PHP-FPM apdoroja puslapio užklausą

Kai naudotojas atveria puslapį, kuriam reikia vykdyti PHP kodą, užklausa pirmiausia patenka į žiniatinklio serverį, pavyzdžiui, Nginx arba Apache. Serveris perduoda užduotį PHP-FPM per FastCGI – žiniatinklio serverio ir programą vykdančio proceso ryšio protokolą. PHP-FPM priskiria užklausą darbiniam procesui, o kodo vykdymo rezultatas grąžinamas žiniatinklio serveriui, tada – naršyklei.

Darbinis procesas – tai paleistas PHP procesas, pasirengęs vykdyti scenarijų. Baigęs apdoroti užklausą, jis paprastai ne iš karto baigia darbą, o lieka pasirengęs kitai užklausai. Taip nereikia kiekvieną kartą naudoti išteklių naujam interpretatoriui paleisti, kaip įprasto CGI atveju.

Pavyzdžiui, atveriant dinaminį WordPress svetainės puslapį gali reikėti paleisti PHP, nuskaityti duomenis iš bazės ir sugeneruoti HTML. PHP-FPM atsako už PHP kodo vykdymą, o ne už visus puslapio pateikimo etapus. CSS failus, paveikslėlius ir kitus statinius išteklius žiniatinklio serveris paprastai pateikia be jo pagalbos.

Kuo PHP-FPM skiriasi nuo PHP ir žiniatinklio serverio

PHP yra programavimo kalba ir kodo vykdymo aplinka, o PHP-FPM valdo tos aplinkos procesus. Tai nėra atskira kalba, turinio valdymo sistema ar Nginx arba Apache pakaitalas. Šie komponentai atlieka skirtingas funkcijas ir gali veikti kartu.

Nginx perduoda PHP scenarijų vykdymą išoriniam mechanizmui, dažnai – PHP-FPM. Apache taip pat gali naudoti PHP-FPM, nors pasitaiko ir konfigūracijų su moduliu mod_php, kuris vykdo PHP kodą pačiuose Apache procesuose. Todėl nereikėtų manyti, kad kiekvienas serveris su PHP veikia vienodai.

PHP-FPM taip pat nepakeičia OPcache. OPcache saugo sukompiliuotą PHP kodą atmintyje, todėl rečiau reikia iš naujo analizuoti ir kompiliuoti failus. PHP-FPM valdo procesus, o OPcache sumažina dalį jų atliekamo darbo – šie sprendimai gali vienas kitą papildyti.

Kada PHP-FPM padeda ir ko jis neišspręs

PHP-FPM leidžia valdyti procesų skaičių, jų paleidimą ir pakartotinį kūrimą. Tai padeda pritaikyti programos užklausų apdorojimą prie serverio išteklių ir vienu metu gaunamų užklausų skaičiaus. Tačiau tai nereiškia, kad jį įjungus veikimas visada pastebimai paspartės, palyginti su bet kuriuo kitu tinkamai sukonfigūruotu PHP vykdymo būdu.

Jei el. parduotuvė ilgai laukia, kol bus įvykdyta lėta duomenų bazės užklausa, vien PHP-FPM jos nepaspartins. Jis taip pat nepašalins išorinio API vėlavimo ar daug išteklių reikalaujančių įskiepio operacijų. Padidinus procesų skaičių galima net dar labiau apkrauti duomenų bazę arba išnaudoti visą atmintį.

Svarbi ir visų puslapių podėlio funkcija. Jei paruoštą HTML galima grąžinti nepaleidžiant PHP, tokia užklausa neužima PHP-FPM proceso. Kitaip apdorojamas pirkinių krepšelis, administravimo skydelis ar suasmenintas puslapis, kai gali būti būtina vykdyti kodą.

Svarbiausi procesų nustatymai

PHP-FPM jungia procesus į telkinius – atskirai konfigūruojamas darbinių procesų grupes. Telkiniams galima nustatyti skirtingus apribojimus ir juos vykdyti su skirtingų sistemos naudotojų teisėmis. Tai padeda atskirti programas. Tačiau vien suskirstymas į telkinius neužtikrina visiško saugumo izoliavimo.

Procesų palaikymo būdą nurodo nustatymas pm:

Parametras pm.max_children nustato didžiausią darbinių procesų skaičių telkinyje, taigi ir PHP užklausų, kurias telkinys gali vykdyti vienu metu, skaičių. Kai visi procesai užimti, kitos užklausos gali laukti eilėje. Per ilgas laukimas ar perkrova gali baigtis klaida.

Pavyzdžiui, nustačius 10 procesų ribą, vienu metu gautos vienuolika užklausų, kurioms reikia PHP, nebus vykdomos visos iš karto. Tačiau tai nereiškia, kad svetainėje gali būti tik 10 naudotojų – naudotojas užima procesą ne visą naršymo laiką, o tik kol apdorojama konkreti užklausa.

Kaip patikrinti, ar reikia keisti konfigūraciją

Bendrojo prieglobos paslaugų teikėjo serveryje PHP-FPM nustatymus paprastai valdo paslaugų teikėjas. Valdymo skydelyje jums gali būti leidžiama pasirinkti tik PHP versiją ir kai kuriuos apribojimus. Ar galima naudoti PHP-FPM, ką leidžiama konfigūruoti ir kokios išteklių ribos taikomos, išsiaiškinkite prieglobos dokumentacijoje arba kreipkitės į techninę pagalbą.

Savo serveryje pradėkite nuo matavimų, o ne nuo ribų didinimo. Patikrinkite, ar telkinys pasiekia pm.max_children ribą, kiek atminties procesai naudoja esant apkrovai ir ar procesorius bei duomenų bazė dar turi laisvų pajėgumų. Tinkamai sukonfigūruotas PHP-FPM lėtų užklausų žurnalas gali padėti nustatyti ilgai vykdomą kodą.

Praktinis kitas žingsnis: pasirinkite vieną lėtą operaciją, pavyzdžiui, krepšelio atvėrimą, ir nustatykite, ar vėluojama laukiant laisvo proceso, ar vykdant pačią programą. Tik šis rezultatas padės pagrįstai nuspręsti, ar keisti PHP-FPM ribas, ar tobulinti kodą ir duomenų bazę.

Taip pat skaitykite

Susipažinkite su BIND – atvirojo kodo DNS serverio programine įranga, jos paskirtimi ir atvejais, kai verta ją diegti patiems.
Sužinokite, ką reiškia Lenkijos REGON registras ir numeris, kuo jis skiriasi nuo NIP bei KRS ir kaip patikrinti įmonės duomenis.
Sužinokite, kaip saugumo antraštės padeda apsaugoti svetainę, kaip jas patikrinti ir įdiegti neblokuojant būtinų funkcijų.