PHP-FPM (FastCGI Process Manager) - менеджер процесів, що виконують PHP. Веб-сервер (Nginx, Caddy) передає йому запити по FastCGI, а FPM роздає їх пулу воркерів. Один воркер обробляє один запит за раз.
Режими менеджера процесів (pm):
static- фіксована кількість воркерів (pm.max_children). Передбачувано, найкраще для виділених серверів.dynamic- кількість змінюється міжpm.min_spare_serversіpm.max_children, стартує зpm.start_servers. Типовий вибір.ondemand- воркери створюються лише під запити й завершуються після простою. Економить пам'ять на малонавантажених сайтах, але перший запит повільніший.
Як порахувати pm.max_children: обмеження - пам'ять.
max_children ≈ (пам'ять для PHP) / (середня пам'ять одного воркера)
Сервер з 4 ГБ, з яких 1 ГБ потрібно базі й системі, і воркери по ~60 МБ: (3072 / 60) ≈ 50. Реальне споживання воркера дивляться в ps чи статусній сторінці FPM під навантаженням.
Що буде при помилці:
- Замало воркерів: запити стають у чергу, час відповіді росте, у лозі FPM -
server reached pm.max_children setting. - Забагато: під навантаженням пам'ять закінчується, сервер іде в swap чи ядро вбиває процеси - гірше, ніж черга.
Корисні налаштування:
pm.max_requests- перезапускати воркер після N запитів, щоб обмежити наслідки витоків пам'яті.request_terminate_timeout- вбивати завислий запит.pm.status_path- сторінка статусу: активні й вільні воркери, довжина черги.slowlogзrequest_slowlog_timeout- стек-трейси повільних запитів.
Альтернатива - довгоживучі сервери (FrankenPHP, RoadRunner, Swoole через Laravel Octane): фреймворк завантажується один раз, але з'являються проблеми стану між запитами.