2016-06-03 3 views
0

Я бегу apache2 на Ubuntu 14.04 LTS. Веб-сервер предназначен только для подачи видеофайлов mp4. Когда модуль статуса сервера включен, я наблюдаю, как сервер запускает 3 дочерних процесса для каждого запроса на загрузку mp4. Это происходит независимо от того, пытается ли мое приложение загрузить файлы, или я делаю это вручную через wget или через веб-сервер. Ни один из этих запросов не повторяется более одного раза. Тем не менее сервер все еще создает 3 детей, все работают как отдельные PID.Почему apache2 запускает несколько дочерних процессов для загрузки одного файла?

Может ли кто-нибудь объяснить, что здесь происходит?

ответ

0

Он делает это для скорости.

На самом деле, это должно быть pre-fork() on startup. Есть вопросы безопасности, устраняющее также:

  • Start Apache2 как корень
  • Open (т.е. listen() на) порт 80 и 443 и т.д. (возможно, как корень)
  • fork()
  • Капля права пользователя на WWW -data: WWW-данные (пользователь: группа), что делает обслуживание гораздо более безопасной
  • accept() соединение (s) и обрабатывать их (у ребенка)

По умолчанию создается определенное количество детей. Вы должны иметь возможность изменить это число. Раньше было 10. Некоторые более крупные серверы будут создавать 100.

Дети затем ответят на определенное количество запросов (по умолчанию 100, если я прав), а затем выйдите. Когда они выходят из родительского процесса, обнаруживается тот факт, что ребенок умер, и он снова называет fork(), чтобы настроить количество детей. Дальнейшие вызовы fork() происходят только в том случае, если это допускают различные пороговые значения.

+0

спасибо. Я понимаю, что предварительная форкировка для скорости. Но наличие нескольких процессов на сервере для обслуживания одного соединения для меня не имеет смысла. Насколько я могу судить, клиентская сторона не открывает несколько подключений, поэтому я не вижу преимущества открытия нескольких серверов? – Balthasar

+0

Сервер не может знать, сколько «одновременных» соединений произойдет все сразу. Однако то, что вы видите, при условии, что количество процессов увеличивается по мере подключения, - это Apache2, чтобы убедиться, что он все еще имеет как минимум X детей, готовых принять новые подключения. –

+0

Обратите внимание, что теперь дневные браузеры делают несколько подключений параллельно, чтобы загрузить сразу несколько файлов. –

Смежные вопросы