Назад | Перейти на главную страницу

Связь между настройками PHP-FPM и mpm_worker (Apache)

У меня есть сайт, на котором работает 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 имели достаточно памяти для запуска. С различными возможными вариантами кэширования это можно решить только путем тестирования работающей системы.