Co to jest PHP-FPM?
Autor: Redakcja Domeny.ForSale Opublikowano
W skrócie: PHP-FPM (FastCGI Process Manager) to menedżer procesów wykonujących kod PHP na serwerze. Współpracuje z serwerem WWW i zarządza procesami roboczymi, które mogą obsługiwać kolejne żądania bez uruchamiania interpretera od nowa za każdym razem. Ułatwia sprawną obsługę stron, na przykład opartych na WordPress, ale sam nie gwarantuje krótszego czasu ładowania — znaczenie mają również kod aplikacji, baza danych i dostępne zasoby.
Jak PHP-FPM obsługuje żądanie strony
Gdy użytkownik otwiera stronę wymagającą wykonania PHP, żądanie najpierw trafia do serwera WWW, takiego jak Nginx lub Apache. Serwer przekazuje zadanie do PHP-FPM przez FastCGI, czyli protokół komunikacji między serwerem WWW a procesem wykonującym aplikację. PHP-FPM przydziela żądanie procesowi roboczemu, a wynik wykonania kodu wraca do serwera WWW i następnie do przeglądarki.
Proces roboczy to uruchomiony proces PHP gotowy do wykonania skryptu. Po zakończeniu obsługi żądania zwykle pozostaje dostępny dla następnego, zamiast kończyć pracę natychmiast. Dzięki temu nie trzeba za każdym razem ponosić kosztu uruchomienia nowego interpretera, jak w klasycznym CGI.
Przykładowo: wejście na dynamiczną podstronę WordPress może wymagać uruchomienia PHP, odczytania danych z bazy i wygenerowania HTML. PHP-FPM odpowiada za wykonanie części PHP, nie za wszystkie etapy dostarczenia strony. Pliki CSS, obrazy i inne zasoby statyczne serwer WWW zwykle obsługuje bez jego udziału.
Czym PHP-FPM różni się od PHP i serwera WWW
PHP to język oraz środowisko wykonujące kod, a PHP-FPM zarządza procesami tego środowiska. Nie jest osobnym językiem, systemem zarządzania treścią ani zamiennikiem Nginx lub Apache. Te elementy pełnią różne funkcje i mogą działać razem.
Nginx przekazuje wykonanie skryptów PHP do zewnętrznego mechanizmu, którym często jest PHP-FPM. Apache również może korzystać z PHP-FPM, choć spotyka się też konfiguracje z modułem mod_php, wykonującym PHP wewnątrz procesów Apache. Nie należy więc zakładać, że każdy serwer z PHP działa w ten sam sposób.
PHP-FPM nie zastępuje również OPcache. OPcache przechowuje skompilowany kod PHP w pamięci, ograniczając potrzebę ponownego parsowania i kompilowania plików. PHP-FPM zarządza procesami, a OPcache ogranicza część pracy wykonywanej przez te procesy — oba rozwiązania mogą się uzupełniać.
Kiedy PHP-FPM pomaga, a czego nie naprawi
PHP-FPM pozwala kontrolować liczbę procesów, ich uruchamianie i ponowne tworzenie. Pomaga dzięki temu dostosować obsługę aplikacji do zasobów serwera oraz liczby równoczesnych żądań. Nie oznacza jednak, że jego włączenie zawsze przyniesie wyraźne przyspieszenie względem każdej innej poprawnie skonfigurowanej metody obsługi PHP.
Jeżeli sklep długo czeka na wolne zapytanie do bazy danych, sam PHP-FPM nie skróci tego zapytania. Podobnie nie usunie opóźnień zewnętrznego API ani kosztownych operacji wykonywanych przez wtyczkę. Zwiększenie liczby procesów może nawet nasilić przeciążenie bazy lub wyczerpać pamięć.
Znaczenie ma też pamięć podręczna pełnych stron. Jeśli gotowy HTML może zostać zwrócony bez uruchamiania PHP, takie żądanie nie zajmuje procesu PHP-FPM. Inaczej wygląda obsługa koszyka, panelu administracyjnego czy spersonalizowanej strony, gdzie wykonanie kodu bywa konieczne.
Najważniejsze ustawienia procesów
PHP-FPM grupuje procesy w pule, czyli oddzielnie konfigurowane zestawy procesów roboczych. Pule mogą mieć różne limity i działać z uprawnieniami różnych użytkowników systemowych, co ułatwia rozdzielenie aplikacji. Sam podział na pule nie jest jednak pełną izolacją bezpieczeństwa.
Sposób utrzymywania procesów określa ustawienie pm:
static— utrzymuje stałą liczbę procesów; ułatwia przewidywanie ich liczby, ale zajmuje pamięć także przy małym ruchu.dynamic— zmienia liczbę procesów w ustalonych granicach i utrzymuje zapas bezczynnych procesów.ondemand— uruchamia procesy, gdy pojawiają się żądania, a po okresie bezczynności je kończy; ogranicza zużycie pamięci podczas przestojów, kosztem uruchamiania procesów po przerwie.
Parametr pm.max_children określa maksymalną liczbę procesów roboczych w puli, a tym samym liczbę żądań PHP, które pula może wykonywać jednocześnie. Gdy wszystkie procesy są zajęte, kolejne żądania mogą oczekiwać w kolejce. Zbyt długie oczekiwanie lub przeciążenie może zakończyć się błędem.
Przykładowo: przy limicie 10 procesów jedenaście równoczesnych żądań wymagających PHP nie będzie wykonywanych jednocześnie. Nie oznacza to jednak limitu 10 użytkowników strony — użytkownik nie zajmuje procesu przez cały czas przeglądania, tylko podczas obsługi konkretnego żądania.
Jak sprawdzić, czy konfiguracja wymaga zmiany
Na hostingu współdzielonym ustawieniami PHP-FPM zwykle zarządza dostawca. W panelu możesz mieć dostęp jedynie do wersji PHP i wybranych limitów. Dostępność PHP-FPM, zakres konfiguracji oraz ograniczenia zasobów potwierdź w dokumentacji lub pomocy technicznej hostingu.
Na własnym serwerze zacznij od pomiarów, nie od zwiększania limitów. Sprawdź, czy pula osiąga pm.max_children, ile pamięci zużywają procesy pod obciążeniem oraz czy procesor i baza danych mają zapas wydajności. Log wolnych żądań PHP-FPM, po odpowiednim skonfigurowaniu, może pomóc wskazać długo wykonywany kod.
Praktyczny następny krok: wybierz jedną wolną operację, na przykład otwarcie koszyka, i ustal, czy opóźnienie wynika z oczekiwania na wolny proces, czy z samego wykonywania aplikacji. Dopiero ten wynik uzasadnia zmianę limitów PHP-FPM albo pracę nad kodem i bazą danych.
Zobacz też: Co oznacza www?
