Настройка параметров требуется для того, чтобы 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]

Если вам сложно посчитать самостоятельно, но можно воспользоваться онлайн калькулятором, которые выдаст более-менее подходящие значения.

[Посещений: 3 543, из них сегодня: 1]

Добавить комментарий