PHP-FPM падает при OOM или багах в расширениях — и весь пул недоступен
Перезагрузка пула при каждом изменении конфига. Клиенты получают 502/500
Блокирующий ввод-вывод, отсутствие async. Один медленный запрос тормозит всех
Каждый пул — отдельный процесс. Много памяти, сложно управлять
Нужен Node.js, Python, Go? Ставьте ещё nginx, ещё сервисы...
Изменил php.ini? Перезапусти FPM. Изменил pool? Рестарт. Всё ломается
| Возможность | ❌ PHP-FPM | ✅ FreeUnit |
|---|---|---|
| Динамический конфиг | Только через рестарт пула | ✓ REST API, мгновенно, без перезагрузки |
| Поддержка языков | Только PHP | ✓ PHP, Python, Go, Java, Node.js, Ruby, Perl, WASM |
| Изоляция приложений | Отдельные пулы = много памяти | ✓ Процессы + namespaces + chroot |
| Обработка сбоев | Краш пула = 502 | ✓ Graceful handling, автоперезапуск воркеров |
| Асинхронность | Синхронный (1 поток = 1 запрос) | ✓ epoll/kqueue, multithreading |
| SSL/TLS | Нужен nginx перед ним | ✓ Встроенный, SNI, session cache |
| Маршрутизация | Нет (только upstream) | ✓ Regex, njs скрипты, header matching |
| Статические файлы | Нет | ✓ Встроенный сервер + chroot |
| Keep-alive | Ограниченно | ✓ 10000+ соединений на пару МБ памяти |
Всего несколько мегабайт памяти на 10к неактивных HTTP keep-alive соединений
epoll (Linux) и kqueue (BSD/macOS) — минимум системных вызовов, максимум скорости
Маршрутизатор и приложения общаются через разделяемую память — микросекундные задержки
Количество процессов задаётся статически или масштабируется превентивно по нагрузке
Отдельный непривилегированный router-процесс для клиентских соединений. Краш приложения не роняет сервер
OOM, нехватка дескрипторов, краши приложений — всё обрабатывается корректно, без падения всего сервера
Namespace и файловая изоляция. Каждое приложение в своей песочнице
Для статики: chroot, ограничения symlink traversal, защита от path traversal атак
Встроенная статистика по процессам, соединениям, ресурсам через API
CVE фиксятся сообществом. Последний: CVE-2026-31431 закрыт в 1.35.4
Вся конфигурация через HTTP API. Обновления применяются granularly в runtime — без единой секунды простоя!
Regex-матчинг, учёт заголовков ответов, njs-скрипты. Маршрутизация статики, прокси и приложений в одном месте
Upstream-группы с weighted round-robin. Динамическое балансирование между бэкендами
Приложения на разных языках и версиях работают рядом. Общий API для всех языков