Apache против узкого места PHP-FPM с дочерними процессами

Серверы Apache, которые используют предварительную версию MPM с меньшим количеством экземпляров сервера, чем максимальное количество дочерних процессов PHP-FPM, могут испытывать проблемы с производительностью. В этом документе объясняется, как решить эти проблемы с зависимостями.

Эта проблема и решение применимы только к серверам, на которых работает Apache в режиме MPM Prefork.

Проблема

В следующем сценарии конфигурация сервера PHP-FPM допускает максимум 20 дочерних процессов PHP-FPM, а конфигурация сервера Apache допускает пять экземпляров сервера.
В следующем примере представлен файл конфигурации сервера PHP-FPM:
_is_present: 1
pm_max_children: 20
pm_max_requests: 20
В следующем примере представлен файл конфигурации сервера Apache:
StartServers: 5
<IfModule prefork.c>
MinSpareServers: 10
MaxSpareServers: 10
</IfModule>
Если сервер Apache получает 20 запросов, он немедленно передает десять из этих запросов доступным дочерним процессам PHP-FPM. После того, как PHP-FPM обработает эти запросы, Apache передаст еще десять запросов PHP-FPM.

Предупреждение: Для серверов большого объема такая конфигурация может вызвать серьезные проблемы с производительностью.

Решение

Чтобы решить эту проблему, вы должны настроить Apache, чтобы позволить достаточному количеству экземпляров сервера обрабатывать максимальное количество дочерних процессов PHP-FPM. Для этого настройте следующие параметры:
  • Минимум запасных серверов (MinSpareServers)
  • Максимальное количество резервных серверов (MaxSpareServers)
  • Макс.рабочих запросов (MaxRequestWorkers)

Установите для этих параметров значение больше или равное параметру pm_max_children в файле конфигурации сервера PHP-FPM.
Поделиться:

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