PHP-FPM (FastCGI Process Manager) — менеджер процессов PHP для веб-серверов (Nginx, Apache). Управляет: сколько процессов запускается, когда они порождаются и умирают, сколько запросов на процесс. При правильной настройке необходим для высоконагруженных сайтов — эффективно обрабатывает тысячи параллельных запросов.
Основные параметры
pm — режим: static (постоянное число, много RAM но быстрее), dynamic (по нагрузке, сбалансированный — самый частый), ondemand (по запросу, экономит RAM но медленнее). Рекомендация: dynamic.
pm.max_children — максимум параллельных PHP-процессов. Главный параметр — нужно учитывать RAM и CPU. Формула: (RAM минус другие сервисы) / (средний RAM на PHP-процесс). Пример: 4GB сервер, 1GB на MySQL/Nginx, 60MB на процесс → max_children = 3000/60 = 50.
pm.start_servers — стартовое число процессов. 20-25% от max_children.
pm.min_spare_servers — минимум свободных. 10-15% от max_children.
pm.max_spare_servers — максимум свободных. 25-30% от max_children. Лишние убиваются.
pm.max_requests — сколько запросов до перезапуска процесса. 500-1000 — против memory leaks.
Status-страница
Для мониторинга: pm.status_path = /fpm-status. В nginx: location ~ ^/fpm-status$ { fastcgi_pass php-fpm; allow 127.0.0.1; deny all; }. По http://site.uz/fpm-status видно: процессы, активные запросы, очередь.
Slowlog
request_slowlog_timeout = 5s — медленнее 5 сек пишется в slowlog. slowlog = /var/log/php-fpm-slow.log. По нему ищут медленные функции и оптимизируют.
Практика Sayt.uz
В тарифах PHP-FPM настроен: Basic max_children = 25, Pro 50, VPS 100+. На распродажах временно +50%. С оптимизацией PHP-FPM WordPress и e-commerce работают на 30-50% быстрее. Совет: не ставьте max_children слишком высоко — при нехватке RAM упадёт всё (OOM kill).