Настройка параметров требуется для того, чтобы PHP-FPM пул потреблял разумное количество памяти сервера. Дефолтная конфигурация далеко не всегда оптимальна.
Например, если вы устанавливаете PHP-FPM из репозитория remi, то пакеты оттуда идут с конфигурацией под средней мощности сервер, а именно:
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
В такой конфигурации может теряться достаточно много памяти, если у вас слабый VPS сервер.
Хочу отметить, что параметры подбираются индивидуально под ваши задачи, а именно под нагрузку на ваш веб сервер и количество доступной памяти.
Разбираемся в настройках
Для начала давайте посмотри, на что каждая из перечисленных настроек влияет.
max_children
— это максимальное число дочерних процессов в пуле php-fpm, которое можно создать. Определяет количество одновременных запросов, которое можно обработать.start_servers
— число дочерних процессов, создаваемых при запуске.min_spare_servers
— желаемое минимальное число неактивных процессов сервера. Если текущее число процессов меньше заданного, то idle процесс будет создан.max_spare_servers
— желаемое максимальное число неактивных процессов сервера. Если количество idle процессов больше данного значения, то лишние процессы будут убиты.
Отмечу, что все эти значения применяются, только если параметр pm был установлен в значение dynamic.
Понять ваш environment
В первую очередь, необходимо посмотреть, сколько памяти сейчас потребляют ваши сайты. для этого можно выполнить команду (имя php-fpm соответствует названию процесса на сервер, если у вас другое — измените):
ps -ylC php-fpm --sort:rss
В полученной табличке посмотрите на колонку RSS (Resident Set Size) — это количество физической памяти в килобайтах, которое занимает каждый процесс. Первой строчкой обычно идет master процесс, а в последующих — child. Нас интересует типичное значение для «детей», оно всегда больше, чем у master и оно может колебаться от процесса к процессу, если у вас много сайтов на одном сервере.
Например, у меня типичный дочерний процесс занимает от 60 до 80 Мбайт, я беру большее значение для расчетов.
Затем, я вычисляю количество памяти, доступное для PHP-FPM по формуле (при условии, что нет других её потребителей типа БД):
[Total Available RAM] - [Reserved RAM] - [10% buffer] = [Available RAM for PHP]
Далее, поделив количество доступной памяти на средний размер процесса, получаем максимальное допустимое число дочерних процессов:
[Available RAM for PHP] / [Average Process Size] = [max_children]
Остальные параметры вычисляются, как процент от этой величины:
pm.max_children = [max_children]
pm.start_servers = [25% of max_children]
pm.min_spare_servers = [25% of max_children]
pm.max_spare_servers = [75% of max_children]
Если вам сложно посчитать самостоятельно, но можно воспользоваться онлайн калькулятором, которые выдаст более-менее подходящие значения.