Может ли кто-нибудь подтвердить, как Apache порождает новых детей?
Если я подключаюсь к веб-серверу (HTTP 1.0 / без поддержки) и выдаю HTTP / GET, у меня будет порожден новый дочерний элемент HTTPD. Если затем выполнить другой HTTP / GET, будет создано новое TCP-соединение. Однако буду ли я использовать тот же дочерний процесс, чтобы создать новый?
Также, если бы я использовал HTTP 1.1 (с keep-alive) и повторно использовал одно и то же TCP-соединение, будет ли процесс / порождение httpd отличаться от этого, если бы я не использовал keepalive?
Спасибо,
если я подключаюсь к веб-серверу (HTTP 1.0 / без сохранения активности) и выдаю HTTP / GET, у меня будет порожден новый дочерний элемент HTTPD
Нет, для завершения TCP-рукопожатия у вас уже есть процесс для обработки вашего запроса. Поскольку вы упоминаете «процессы», это означает, что вы говорите о 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 использует несколько дочерних процессов с одним потоком каждый. Каждый процесс обрабатывает одно соединение за раз.