У меня есть сайт, на котором работает Magento со следующей настройкой:
Каждый процесс PHP-FPM занимает около 80 МБ ОЗУ.
Я хочу настроить параметры PHP-FPM и mpm_worker. Читая документацию, меня немного смущает связь между параметрами в PHP-FPM и mpm_worker.
Например, PHP-FPM имеет конфигурации: pm.min_spare_servers
, pm.max_spare_servers
, pm.start_servers
и max_children
. Я понимаю, что означают эти параметры применительно к PHP-FPM.
Однако mpm_worker имеет следующие конфигурации: MinSpareThreads
, MaxSpareThreads
, StartServers
и ThreadLimit
. Опять же, изолированно от mpm_worker, я понимаю, что они делают.
Мой вопрос: как эти конфигурации соотносятся друг с другом? Допустим, я установил StartServers=2
и ThreadsPerChild=25
. Это дало бы мне 50 потоков для начала относительно Apache / mpm_worker. Если я затем установлю pm.start_servers = 50
, PHP-FPM сначала порождает 50 процессов.
Итак, какова связь между этими 50 потоками «Apache» и 50 процессами «PHP-FPM»? Использует ли каждый поток Apache один процесс PHP-FPM?
Я надеюсь, что кто-нибудь сможет понять это.
Спасибо!
Apache обслуживает запросы от клиентов, используя дочерние элементы потоков, но он будет вызывать PHP-FPM только для файлов php - изображения, css и js должны обслуживаться непосредственно из Apache и, таким образом, не использовать поток PHP-FPM.
PHP-FPM имеет несколько потоков без дочерних - каждый поток обслуживает запрос от Apache.
AFAIK, несколько запросов от одного и того же клиента (загрузка страницы, а также изображений, css и js) должны использовать несколько потоков, если у вас нет KeepAlive, установленного в Apache. См. Эту ссылку для получения дополнительной информации о KeepAlive.
Недавно я сам настраивал сервер Apache и обнаружил, что если у вас несколько ядер, лучше увеличить количество дочерних элементов на поток.
Отношения отображаются динамически. Это отдельные процессы, которые также можно запускать на отдельных серверах, поэтому у вас есть множество вариантов конфигурации.
Процессы / потоки Apache обрабатывают начальные соединения, которые затем используют процессы php-fpm для анализа файлов PHP для возврата запросов.
Здесь есть много переменных, которые подскажут, как их настроить, но обычно настраивают apache так, чтобы у него было достаточно потоков для обработки запросов в режиме реального времени, и настраивать php-fpm, чтобы ваши сценарии / веб-сайты PHP имели достаточно памяти для запуска. С различными возможными вариантами кэширования это можно решить только путем тестирования работающей системы.