Порождение процессов HTTPD

Кто-нибудь может подтвердить, как Apache порождает новых детей?

Например, если я подключусь к веб-серверу (HTTP 1.0 / no keep alive) и выдаст HTTP /GET, у меня появится новый дочерний элемент HTTPD. Если затем выполнить другой HTTP /GET, будет создано новое TCP-соединение. Однако буду ли я использовать тот же дочерний процесс, из которого я порожу новый?

Кроме того, если бы я использовал HTTP 1.1 (с keep-alive) и повторно использовал то же TCP-соединение, будет ли процесс / порождение httpd отличаться от того, если бы я не использовал keepalive?

Спасибо,

2 ответа

Решение

если я подключусь к веб-серверу (HTTP 1.0 / no keep alive) и выдаст HTTP /GET, у меня появится новый дочерний элемент HTTPD

Нет, для завершения TCP-рукопожатия у вас уже есть процесс для обработки вашего запроса. Поскольку вы упоминаете "процессы", это подразумевает, что вы говорите о pre-fork MPM. В этом случае на сервере уже должен быть пул доступных дочерних процессов - один из них получает мьютекс для захвата следующего входящего соединения.

Сервер на основе потоков работает аналогичным образом.

Сервер, основанный на событиях, представляет собой совершенно другой источник рыбы и не порождает потоки / процессы.

Если затем выдаст другой HTTP /GET... Я буду использовать тот же дочерний процесс

Нет. И даже если вы знаете, что у вас есть соединение keepalive, сервер не сохраняет состояние, поэтому вы должны рассматривать его как новый процесс.

Универсальных настроек не существует, так как это наиболее важный аспект производительности http-сервера. Как правило, Apache изо всех сил старается избежать разветвления (или порождения, как вы это назвали). Проверь это:

http://www.stepwise.hk/blog/check-if-apache-running-prefork-or-worker/

Модули многопроцессорной обработки (MPM) - это модули Apache, которые управляют сетевыми подключениями и отправляют запросы. Для Apache2 доступны два общих MPM, а именно mpm_prefork_module и mpm_worker_module. В модуле mpm_prefork_module используется традиционная модель одного процесса на запрос, в то время как в модуле mpm_worker_module используется многопоточная модель, в которой используются несколько процессов, каждый из которых имеет несколько потоков, чтобы повысить производительность при меньших накладных расходах.

В руководствах по Apache 2.4 сказано:

При сборке Apache вы должны выбрать MPM для использования. Для некоторых платформ существуют MPM для конкретных платформ: mpm_netware, mpmt_os2 и mpm_winnt [для любой версии MS Windows]. Для общих систем типа Unix есть несколько MPM, из которых можно выбирать. Выбор MPM может повлиять на скорость и масштабируемость httpd:

  • Рабочий MPM использует несколько дочерних процессов со многими потоками каждый. Каждый поток обрабатывает одно соединение за раз. Worker, как правило, является хорошим выбором для серверов с большим трафиком, поскольку он занимает меньше места в памяти, чем prefork MPM.
  • Событие MPM является многопоточным, как Worker MPM, но оно предназначено для одновременного обслуживания большего количества запросов, передавая часть обработки обработке вспомогательным потокам, освобождая основные потоки для работы с новыми запросами.
  • Prefork MPM использует несколько дочерних процессов с одним потоком каждый. Каждый процесс обрабатывает одно соединение за раз.
Другие вопросы по тегам