SCROLL
Среднее время на прочтение: 1 мин.

Настройка pm.max_children для PHP-FPM

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

Когда ваш сайт или приложение начинает получать все больше трафика, вы можете столкнуться с предупреждением в логах ошибок PHP-FPM:

WARNING: [pool www] server reached pm.max_children setting (5), consider raising it

Это сообщение указывает на то, что количество одновременных запросов превысило текущее значение параметра pm.max_children. Хотя такие предупреждения не всегда означают серьезные проблемы, их нельзя игнорировать, особенно если трафик продолжает расти.

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

Для расчета оптимального значения pm.max_children необходимо учитывать объем доступной оперативной памяти (RAM) на вашем сервере и среднее потребление памяти одним процессом PHP-FPM.

Все ниже расчеты будут производится из расчета что на сервере установлено 4 ГБ оперативной памяти.

Шаг 1: Проверка использования памяти процессами PHP-FPM

Чтобы узнать, сколько памяти использует каждый процесс PHP-FPM, выполним следующую команду:

ps -C php-fpm8.2 -o rss=

Здесь:

  • -C php-fpm8.2 — фильтрует процессы по имени (замените версию PHP на вашу).
  • -o rss= — выводит объем физической памяти (в килобайтах), используемой каждым процессом.

Пример вывода:

123456
234567
345678
456789

Чтобы рассчитать среднее значение, используйте команду:

ps -C php-fpm8.2 -o rss= | awk '{ sum += $1; count++ } END { if (count > 0) print sum / count }'

Например, если среднее значение равно 40147.5 KB, это означает, что каждый процесс PHP-FPM использует около 40 МБ памяти.

Шаг 2: Расчет доступной памяти для PHP

Не вся доступная память должна быть выделена под PHP-FPM. Необходимо оставить резерв для других системных процессов и добавить буфер для предотвращения перегрузки системы.

Формула расчета:

[Доступная память для PHP] = [Всего доступно памяти] - [Зарезервировано памяти] - [10% буфер]

Пример расчета:

  • Всего доступно памяти : 4 ГБ = 4096 МБ = 4096000 КБ.
  • Зарезервировано памяти : 1 ГБ = 1024 МБ = 1024000 КБ (резерв для ОС и других служб).
  • Буфер (10%) : 0.4 ГБ = 409.6 МБ = 409600 КБ.

Подставляем значения:

Доступная память для PHP = 4096000 КБ - 1024000 КБ - 409600 КБ = 2662400 КБ

Шаг 3: Расчет максимального количества процессов

Теперь, зная доступную память и среднее потребление памяти одним процессом, можно рассчитать pm.max_children:

pm.max_children = [Доступная память для PHP] / [Средний размер процесса]

Пример:

  • Среднее использование памяти одним процессом : 40147.5 КБ (40 МБ).
  • Доступная память для PHP : 2662400 КБ.
pm.max_children = 2662400 КБ / 40147.5 КБ66

Для большей стабильности рекомендуется оставить запас и установить значение pm.max_children немного ниже, например, 50.

Шаг 4: Настройка связанных параметров

После расчета pm.max_children, настройте остальные параметры:

/etc/php/8.2/fpm/pool.d/www.conf
pm.max_children = 50
pm.start_servers = 13  # 25% от max_children
pm.min_spare_servers = 13  # 25% от max_children
pm.max_spare_servers = 38  # 75% от max_children

Заключение

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

Для расчета можно так же воспользоваться онлайн-калькулятором: PHP-FPM Calculator.
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ

Обсуждение

0 комментариев

Нет комментариев.