Что? s Связь между nginx worker_process и PHP-FPM

Я: новичок в nginx и FastCGI в целом, извиняюсь, если это старая шляпа и очевидность, но поиск в Google показывает мне, что много людей рекомендуют случайные значения конфигурации, но никого, кто объясняет причины их решений .

Какая связь между рабочим_процессом nginx и рабочим PHP-FPM? Означает ли большее количество воркеров nginx больше работников PHP-FPM, или они не связаны?

Я понимаю, как это работает на высоком уровне:

  1. Пользователь запрашивает веб-страницу
  2. nginx обрабатывает запрос, видит его ' sa Страница PHP
  3. nginx передает запрос PHP-FPM
  4. PHP-FPM либо обрабатывает запрос с существующим процессом, либо порождает новые

Что мне неясно, есть ли какая-либо связь между PHP-FPM, порождающей новые дочерние процессы и какие рабочие процессы nginx с ним разговаривают. то есть, если бы у вас было два идентичных веб-сервера, один с worker_process = 4 , а другой с worker_process = 8 , и они оба видели идентичный веб-трафик, будет ли один сервер создавать больше дочерних php-fpm чем другие процессы? Или я сказал здесь что-то настолько глупое, что это показывает, что мне не хватает фундаментальной концепции? (если да, то что?)

Не пытаюсь решить конкретную проблему - просто пытаюсь научиться рассуждать о поведении nginx и php-fpm, чтобы я мог внести свой вклад в мозговые штурмы / поиск неисправностей по масштабированию и производительности.

2
задан 1 December 2015 в 08:48
2 ответа

Рабочие процессы Nginx подключают к php-fpm. Однако они делают это, создавая асинхронные соединения, рассматривая их как обычные восходящие потоки, как и любые другие.

Nginx - это приложение, управляемое событиями, а это означает, что большая часть операций ввода-вывода, которые он выполняет, особенно подключение к восходящим потокам, является асинхронным. . Таким образом, один рабочий процесс в любое время может иметь любое количество подключений к восходящему потоку.

PHP-FPM будет порождаться (или, в идеале, по соображениям производительности, использовать уже созданный, но не используемый процесс) для каждого полученного запроса.

Итак, учитывая это, обычно нет прямой связи между ними. У вас всегда будет ровно столько рабочих процессов в nginx, сколько вы определите, но количество процессов php-fpm в большинстве случаев будет варьироваться в зависимости от количества получаемых запросов, что напрямую не связано с количеством рабочих процессов nginx.

Кто-то может возразить, что если вы включите поддержку активности fastcgi в nginx, процессы php-fpm останутся там дольше. Учитывая, что каждый рабочий процесс получает свой собственный пул соединений для восходящих потоков, которые используют keepalive, это может привести к тому, что php-fpm будет постоянно поддерживать выполнение большего количества процессов для каждого рабочего процесса. Однако, насколько мне известно, поддержка активности fastcgi в php-fpm нарушена, так что это не должно быть проблемой :).

2
ответ дан 3 December 2019 в 10:41

Не существует внутренней связи между nginx worker_process es и дочерними элементами php-fpm. Им даже не обязательно работать на одной машине! Но если они находятся на одной машине, они могут бороться за ЦП (что обычно не является проблемой, поскольку nginx требует очень мало ЦП по сравнению с PHP).

1
ответ дан 3 December 2019 в 10:41

Теги

Похожие вопросы