Co je PHP-FPM a jak spravuje procesy PHP
Autor: Redakce Domeny.ForSale Zveřejněno
Stručně: PHP-FPM (FastCGI Process Manager) je správce procesů, které na serveru vykonávají kód PHP. Spolupracuje s webovým serverem a spravuje pracovní procesy, které mohou obsluhovat další požadavky, aniž by se pokaždé znovu spouštěl interpret. Pomáhá efektivně obsluhovat weby, například ty postavené na systému WordPress, ale sám o sobě nezaručuje kratší dobu načítání — záleží také na kódu aplikace, databázi a dostupných prostředcích.
Jak PHP-FPM zpracovává požadavek na stránku
Když uživatel otevře stránku vyžadující spuštění PHP, požadavek nejprve dorazí na webový server, například Nginx nebo Apache. Server předá úlohu správci PHP-FPM prostřednictvím FastCGI, tedy protokolu pro komunikaci mezi webovým serverem a procesem vykonávajícím aplikaci. PHP-FPM přidělí požadavek pracovnímu procesu a výsledek vykonání kódu se vrátí webovému serveru a následně prohlížeči.
Pracovní proces je spuštěný proces PHP připravený vykonat skript. Po dokončení požadavku obvykle zůstává dostupný pro další požadavek, místo aby ihned skončil. Díky tomu není nutné pokaždé vynakládat prostředky na spuštění nového interpretu jako u klasického CGI.
Například otevření dynamické podstránky systému WordPress může vyžadovat spuštění PHP, načtení dat z databáze a vygenerování HTML. PHP-FPM odpovídá za vykonání části napsané v PHP, nikoli za všechny kroky potřebné k doručení stránky. Soubory CSS, obrázky a další statické prostředky webový server obvykle obsluhuje bez jeho účasti.
Čím se PHP-FPM liší od PHP a webového serveru
PHP je jazyk i prostředí pro vykonávání kódu, zatímco PHP-FPM spravuje procesy tohoto prostředí. Není to samostatný jazyk, systém pro správu obsahu ani náhrada za Nginx nebo Apache. Tyto součásti plní různé funkce a mohou spolupracovat.
Nginx předává vykonávání skriptů PHP externímu mechanismu, kterým je často PHP-FPM. Také Apache může využívat PHP-FPM, existují však i konfigurace s modulem mod_php, který vykonává PHP uvnitř procesů Apache. Nelze tedy předpokládat, že každý server s PHP funguje stejně.
PHP-FPM nenahrazuje ani OPcache. OPcache uchovává zkompilovaný kód PHP v paměti, čímž omezuje nutnost soubory znovu parsovat a kompilovat. PHP-FPM spravuje procesy, zatímco OPcache snižuje množství práce, kterou tyto procesy vykonávají — obě řešení se mohou doplňovat.
Kdy PHP-FPM pomůže a co nevyřeší
PHP-FPM umožňuje řídit počet procesů, jejich spouštění a opětovné vytváření. Díky tomu pomáhá přizpůsobit zpracování požadavků aplikace prostředkům serveru a počtu souběžných požadavků. Neznamená to však, že jeho zapnutí vždy přinese výrazné zrychlení oproti jakékoli jiné správně nakonfigurované metodě zpracování PHP.
Pokud e-shop dlouho čeká na dokončení pomalého databázového dotazu, samotný PHP-FPM tento dotaz nezrychlí. Stejně tak neodstraní prodlevy externího API ani náročné operace prováděné pluginem. Zvýšení počtu procesů může dokonce zhoršit přetížení databáze nebo vyčerpat paměť.
Důležitá je také mezipaměť celých stránek. Pokud lze vrátit hotové HTML bez spuštění PHP, takový požadavek neobsadí proces PHP-FPM. Jiná situace nastává při obsluze košíku, administračního rozhraní nebo personalizované stránky, kde bývá vykonání kódu nezbytné.
Nejdůležitější nastavení procesů
PHP-FPM sdružuje procesy do fondů (poolů), tedy samostatně konfigurovaných skupin pracovních procesů. Fondy mohou mít různé limity a běžet s oprávněními různých systémových uživatelů, což usnadňuje oddělení aplikací. Samotné rozdělení do fondů však nezajišťuje úplnou bezpečnostní izolaci.
Způsob udržování procesů určuje nastavení pm:
static— udržuje stálý počet procesů; jejich počet je tak předvídatelný, ale zabírají paměť i při malém provozu.dynamic— mění počet procesů v nastavených mezích a udržuje zásobu nečinných procesů.ondemand— spouští procesy při příchodu požadavků a po určité době nečinnosti je ukončuje; omezuje spotřebu paměti v době bez provozu, ovšem za cenu nutnosti procesy po přestávce znovu spustit.
Parametr pm.max_children určuje maximální počet pracovních procesů ve fondu, a tedy i počet požadavků PHP, které může fond zpracovávat současně. Když jsou všechny procesy obsazené, další požadavky mohou čekat ve frontě. Příliš dlouhé čekání nebo přetížení může skončit chybou.
Například při limitu 10 procesů nelze současně zpracovávat všech jedenáct souběžných požadavků vyžadujících PHP. Neznamená to ale omezení na 10 uživatelů webu — uživatel neobsazuje proces po celou dobu prohlížení, ale pouze při zpracování konkrétního požadavku.
Jak zjistit, zda je potřeba změnit konfiguraci
Na sdíleném hostingu nastavení PHP-FPM obvykle spravuje poskytovatel. V ovládacím panelu můžete mít přístup pouze k volbě verze PHP a vybraným limitům. Dostupnost PHP-FPM, možnosti konfigurace a omezení prostředků si ověřte v dokumentaci nebo u technické podpory hostingu.
Na vlastním serveru začněte měřením, nikoli zvyšováním limitů. Zkontrolujte, zda fond dosahuje limitu pm.max_children, kolik paměti procesy spotřebovávají při zatížení a zda mají procesor a databáze výkonovou rezervu. Záznam pomalých požadavků v PHP-FPM může po správném nastavení pomoci odhalit kód, jehož vykonání trvá dlouho.
Praktický další krok: vyberte jednu pomalou operaci, například otevření košíku, a zjistěte, zda prodlevu způsobuje čekání na volný proces, nebo samotný běh aplikace. Teprve podle výsledku má smysl měnit limity PHP-FPM, nebo se zaměřit na kód a databázi.
