Apache против узкого места PHP-FPM с дочерними процессами
Серверы Apache, которые используют предварительную версию MPM с меньшим количеством экземпляров сервера, чем максимальное количество дочерних процессов PHP-FPM, могут испытывать проблемы с производительностью. В этом документе объясняется, как решить эти проблемы с зависимостями.
Эта проблема и решение применимы только к серверам, на которых работает Apache в режиме MPM Prefork.
В следующем примере представлен файл конфигурации сервера PHP-FPM:
Предупреждение: Для серверов большого объема такая конфигурация может вызвать серьезные проблемы с производительностью.
Установите для этих параметров значение больше или равное параметру pm_max_children в файле конфигурации сервера 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.