 Autor: [Piotr Wasilewski](/autorzy/piotr-wasilewski) Architekt rozwiązań chmurowych · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/)
2.  /
3.  [Baza wiedzy](/baza-wiedzy/)
4.  /
5.  PHP-FPM konfiguracja 

# PHP-FPM — konfiguracja i optymalizacja na VPS

Ostatnia aktualizacja: kwiecień 2026

**TL;DR:** Dla VPS 1 GB RAM z WordPressem: `pm = dynamic`, `pm.max_children = 10`, `pm.start_servers = 3`, OPcache 64 MB. Dla 2 GB: max\_children = 20, OPcache 128 MB. Sprawdź rzeczywiste zużycie procesu: `ps aux | grep php-fpm` — dopasuj liczbę procesów do dostępnego RAM.

## Czym jest PHP-FPM?

PHP-FPM (FastCGI Process Manager) to implementacja FastCGI dla PHP, domyślna w nowoczesnych konfiguracjach z Nginx. Zarządza pulą procesów PHP obsługujących żądania — w przeciwieństwie do mod\_php (Apache) gdzie PHP jest wbudowane w serwer, PHP-FPM to osobny demon.

Klucz do wydajności: prawidłowy dobór liczby procesów (workers). Za mało — kolejkowanie żądań i wolne odpowiedzi. Za dużo — brak RAM, swap, crash.

## Konfiguracja puli procesów — plik pool.d/www.conf

Główny plik konfiguracyjny puli: `/etc/php/8.2/fpm/pool.d/www.conf`

\[www\]
user = www-data
group = www-data

; Socket Unix — szybszy niż TCP dla lokalnego Nginx
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data

; === ZARZĄDZANIE PROCESAMI ===
; dynamic = procesy tworzone/niszczone wg ruchu (ZALECANE dla VPS)
pm = dynamic

; Maksymalna liczba procesów (workers)
; Wzór: (RAM dla PHP) / (pamięć 1 procesu)
; Przykład VPS 2GB: (1200MB / 60MB) = 20
pm.max\_children = 20

; Procesy startujące przy uruchomieniu PHP-FPM
pm.start\_servers = 5

; Minimum wolnych (oczekujących) procesów
pm.min\_spare\_servers = 3

; Maximum wolnych procesów (reszta jest niszczona)
pm.max\_spare\_servers = 8

; Restart procesu po N żądaniach (zapobiega wyciekowi pamięci)
pm.max\_requests = 500

; === LIMITY ===
php\_admin\_value\[memory\_limit\] = 256M
php\_admin\_value\[max\_execution\_time\] = 60
php\_admin\_value\[upload\_max\_filesize\] = 64M
php\_admin\_value\[post\_max\_size\] = 64M

; === LOGI ===
; Loguj wolne żądania (powyżej 5 sekund)
slowlog = /var/log/php8.2-fpm-slow.log
request\_slowlog\_timeout = 5s

Rekomendowane ustawienia wg rozmiaru VPS:

VPS RAM

max\_children

start\_servers

OPcache

512 MB

5

2

32 MB

1 GB

10

3

64 MB

2 GB

20

5

128 MB

4 GB

40

8

256 MB

## Konfiguracja OPcache

OPcache konfiguruj w `/etc/php/8.2/fpm/conf.d/10-opcache.ini`:

\[opcache\]
opcache.enable = 1
opcache.enable\_cli = 0

; Pamięć dla skompilowanych skryptów (MB)
; WordPress + wtyczki: min 128MB zalecane
opcache.memory\_consumption = 128

; Pamięć dla intern strings
opcache.interned\_strings\_buffer = 16

; Max liczba plików PHP w cache
opcache.max\_accelerated\_files = 10000

; Sprawdzaj zmiany co N sekund (0 = sprawdzaj zawsze; prod: 60-300)
opcache.revalidate\_freq = 60

; Wyłącz w produkcji dla max wydajności (cache nie sprawdza zmian)
; Pamiętaj: po deployu wykonaj opcache\_reset() lub restart php-fpm
; opcache.validate\_timestamps = 0

; Zapisuj bajtkody na dysk (szybki zimny start po restarcie)
opcache.file\_cache = /tmp/php-opcache
opcache.file\_cache\_only = 0

; Dobre dla stabilnych aplikacji
opcache.save\_comments = 1

\# Po każdej zmianie konfiguracji — restart PHP-FPM:
sudo systemctl restart php8.2-fpm

# Weryfikacja konfiguracji:
sudo php-fpm8.2 -t

# Status OPcache (przez PHP):
php -r "print\_r(opcache\_get\_status());" | head -30

## Wiele pul procesów — osobna konfiguracja per strona

Jeśli hostujesz wiele stron, warto użyć oddzielnych pul PHP-FPM — izolacja procesów, osobne limity pamięci, osobne użytkowniki systemowe:

\# /etc/php/8.2/fpm/pool.d/site1.conf
\[site1\]
user = site1
group = site1
listen = /run/php/php8.2-site1.sock
pm = ondemand          ; oszczędny tryb dla małych stron
pm.max\_children = 5
pm.process\_idle\_timeout = 10s
pm.max\_requests = 200

# /etc/php/8.2/fpm/pool.d/site2.conf
\[site2\]
user = site2
group = site2
listen = /run/php/php8.2-site2.sock
pm = dynamic           ; aktywny tryb dla głównej strony
pm.max\_children = 15
pm.start\_servers = 3
pm.min\_spare\_servers = 2
pm.max\_spare\_servers = 6

## Najczęstsze pytania

Ile pamięci RAM zajmuje jeden proces PHP-FPM? +

Jeden proces PHP-FPM z WordPressem zajmuje zazwyczaj 32-80 MB RAM. Przy typowej instalacji WP (kilka wtyczek) możesz przyjąć ~50 MB jako punkt startowy. Sprawdź rzeczywiste zużycie: ps aux | grep php | awk '{sum += $6} END {print sum/1024 " MB}'. Na VPS 1 GB RAM zostaw 400 MB dla systemu, MySQL i Nginx — masz ~600 MB dla PHP-FPM = max 12 procesów po 50 MB.

Jaka jest różnica między pm=static, pm=dynamic i pm=ondemand? +

static: stała liczba procesów (pm.max\_children). Przewidywalne zużycie RAM, szybka odpowiedź. Dobre dla serwerów ze stabilnym ruchem. dynamic: procesy tworzą się i niszczą w zależności od ruchu (parametry: start\_servers, min/max\_spare\_servers, max\_children). Balans między wydajnością a oszczędnością RAM. ondemand: procesy tworzone tylko na żądanie, niszczone po pm.process\_idle\_timeout. Najmniejsze zużycie RAM w spoczynku — dobre dla rzadko odwiedzanych stron na VPS z małą ilością pamięci.

Co to jest OPcache i jak go skonfigurować dla WordPressa? +

OPcache to wbudowane w PHP rozszerzenie cache'ujące skompilowane bajtkody skryptów. Zamiast parsować i kompilować PHP przy każdym żądaniu, OPcache przechowuje gotowe bajtkody w pamięci — skraca czas wykonania PHP o 30-70%. Minimalna konfiguracja dla WordPressa: opcache.enable=1, opcache.memory\_consumption=128 (MB), opcache.max\_accelerated\_files=10000, opcache.revalidate\_freq=60 (sekundy). Na produkcji ustaw opcache.validate\_timestamps=0 dla maksymalnej wydajności (pamiętaj o opcache\_reset() przy deployu).

Jak sprawdzić czy PHP-FPM działa i jakie ma obciążenie? +

Włącz status page w konfiguracji PHP-FPM: pm.status\_path = /status. Następnie w Nginx dodaj location /fpm-status { fastcgi\_pass unix:/var/run/php/phpX.X-fpm.sock; include fastcgi\_params; } (ogranicz dostęp do 127.0.0.1). Sprawdź przez: curl http://127.0.0.1/fpm-status?full. Zobaczysz: active processes, idle processes, accepted connections, max children reached (jeśli > 0 — potrzebujesz więcej procesów). Użyj też: php-fpm8.2 -t (test konfiguracji).

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

dhosting.pl

Hosting PHP z dobrymi parametrami pod WordPress i WooCommerce

PHP + hosting

[Aktywuj rabat →](/out/dhosting)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/dhosting)

SEOhost

Hosting PHP z prostą konfiguracją i LiteSpeed

PHP + LiteSpeed

[Aktywuj rabat →](/out/seohost)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/seohost)

SmartHost

Hosting pod aplikacje PHP z LiteSpeed PRO

PHP + sklepy

[Aktywuj rabat →](/out/smarthost)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/smarthost)

## Powiązane strony

-   [Nginx — konfiguracja virtual hosts](/baza-wiedzy/nginx-vhost-konfiguracja)
-   [PHP wersje — co wybrać?](/baza-wiedzy/php-wersje-hosting-co-wybrac)
-   [MySQL — baza danych na hostingu](/baza-wiedzy/mysql-baza-danych-hosting)
-   [Docker na VPS](/baza-wiedzy/docker-na-vps)
-   [Porównanie VPS](/vps/)
-   [Baza wiedzy](/baza-wiedzy/)