Как рассчитать оптимальное количество процессов php-fpm (max_children) исходя из объема доступной оперативной памяти сервера?

Параметр `pm.max_children` в PHP-FPM определяет максимальное количество дочерних процессов, которые могут работать одновременно. Неправильная настройка этого значения приводит либо к нехватке памяти и краху сервера, либо к недоиспользованию ресурсов и очередям запросов.

## Базовая формула расчёта

Общая формула выглядит следующим образом:

pm.max_children = (Доступная RAM для PHP-FPM) / (Средний размер одного процесса PHP)

**Пример:** если у вас 4 ГБ RAM, из которых 1 ГБ занимают ОС и другие сервисы (MySQL, Nginx и т.д.), то под PHP-FPM доступно ~3 ГБ = 3072 МБ. Если один процесс PHP потребляет в среднем 50 МБ, то:

pm.max_children = 3072 / 50 ≈ 61

## Как узнать реальный размер одного процесса PHP

Запустите команду на сервере:

bash
ps —no-headers -o «rss,cmd» -C php-fpm | awk ‘{ sum+=$1 } END { printf «%d МБn», sum/NR/1024 }’

Либо используйте утилиту `php-fpm-calculator` или смотрите через `top`/`htop`, фильтруя по процессам php-fpm.

Типичный диапазон потребления памяти одним процессом PHP-FPM:
— Лёгкие приложения (простые сайты): 20–40 МБ
— Средние CMS (WordPress, Joomla): 40–80 МБ
— Тяжёлые фреймворки (Laravel, Symfony): 80–150 МБ и выше

## Практические рекомендации

1. **Оставляйте резерв.** Никогда не выделяйте под PHP-FPM 100% RAM. Оставьте минимум 20–30% для ОС, буферов и других процессов.

2. **Учитывайте режим управления процессами (pm).** При `pm = dynamic` важны также параметры `pm.min_spare_servers`, `pm.max_spare_servers` и `pm.start_servers`. При `pm = static` все `max_children` процессов запускаются сразу — расход памяти постоянный.

3. **Мониторьте реальное потребление.** После настройки следите за метриками через `php-fpm status` или инструменты мониторинга (Prometheus, Zabbix, Grafana).

4. **Не ставьте значение слишком низким.** Если `max_children` достигается, новые запросы встают в очередь или отклоняются — это приводит к ошибкам 502/504.

5. **Пересчитывайте при изменениях.** После обновления PHP, установки новых расширений или изменения кода приложения средний размер процесса может существенно измениться.

## Итоговый алгоритм

1. Определите объём RAM, доступной для PHP-FPM.
2. Измерьте средний размер одного процесса PHP-FPM под нагрузкой.
3. Разделите первое на второе.
4. Умножьте результат на 0.8–0.9 для запаса безопасности.
5. Проверьте настройку под реальной нагрузкой и скорректируйте при необходимости.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.