У меня есть сайт, работающий на Magento со следующей настройкой:
- Apache 2.4 с mpm_worker
- PHP-FPM
- Общий объем оперативной памяти на сервере: 14 ГБ (10 ГБ доступно для Apache/PHP)
Каждый процесс 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?
Надеюсь, кто-нибудь сможет прояснить этот вопрос.
Спасибо!
решение1
Apache обслуживает запросы клиентов, используя дочерние потоки, но он будет вызывать PHP-FPM только для файлов php — изображения, css и js должны обслуживаться непосредственно из Apache и, таким образом, не использовать поток PHP-FPM.
PHP-FPM имеет несколько потоков без дочерних потоков — каждый поток обслуживает запрос от Apache.
Насколько мне известно, несколько запросов от одного и того же клиента (загрузка страницы, а также изображений, css и js) должны потреблять несколько потоков, если в Apache не настроен KeepAlive.Посмотреть эту ссылкудля получения дополнительной информации о KeepAlive.
Недавно я сам настраивал сервер Apache и обнаружил, что если у вас несколько ядер, то лучше увеличить количество дочерних процессов на поток.
решение2
Связь динамически отображается. Это отдельные процессы, которые также могут быть запущены на отдельных серверах, поэтому у вас есть множество вариантов конфигурации.
Процессы/потоки Apache обрабатывают начальные соединения, которые затем используют процессы php-fpm для анализа PHP-файлов для возврата запросов.
Здесь есть много переменных, которые помогут вам определить, как настроить, но в целом настройте apache так, чтобы у него было достаточно потоков для обработки запросов в реальном времени, и настройте php-fpm так, чтобы у ваших PHP-скриптов/wensites было достаточно памяти для запуска. С различными возможными вариантами кэширования это можно решить только путем бенчмаркинга работающей системы.