Сколько соединений может обрабатывать дочерний процесс?

Согласно официальному сайту apache.org:

Директива MaxConnectionsPerChild устанавливает ограничение на количество подключений, которые будет обрабатывать отдельный дочерний серверный процесс, прежде чем он умрет.

Буду признателен за уточнения:

Q1: Поскольку этот параметр находится в контексте prefork, относится ли количество соединений, упомянутое выше, к запросам на соединения (SYN_SENT) или принятым/установленным соединениям? В какой ситуации было бы хорошо истечь?

Вопрос 2. В отличие от родительского узла, который обрабатывает только прослушивание порта 80, дочерний узел с предварительным ответвлением обрабатывает как прослушивание, так и установленные соединения. Предел одновременных входящих запросов на подключение (SYN_SENT), которые он может обрабатывать одновременно, ограничен директивой apache MaxRequestWorkers, в то время как ThreadsPerChild ограничивает количество одновременных ESTABLISHED сокетов. Это правильно ?

Q3: Если дети прослушивают порт 80, что тогда будет делать родитель? Он продолжает слушать?

Спасибо


person MFIHRI    schedule 20.01.2017    source источник
comment
Я так понимаю, что ThreadsPerChild не используется в prefork mpm   -  person MFIHRI    schedule 21.01.2017


Ответы (1)


Зависит от используемого mpm. Для prefork mpm дочерний процесс обрабатывает одно соединение (поэтому serverlimit будет равен MaxClients (теперь называется MaxRequestWorkers с apache 2.4).

Рабочие и событийные mpms используют потоки, в которых один дочерний процесс может обрабатывать множество подключений.

Q1: Нет.
MaxConnectionsPerChild теперь называется MaxRequestsPerChild. Согласно веб-сайту apache.org, MaxRequestsPerChild устанавливает общее количество запросов, которые каждый дочерний серверный процесс обслуживает до того, как дочерний процесс умрет. Основная причина установки MaxRequestsPerChild — избежать долгоживущих утечек памяти, вызванных процессами. Значение по умолчанию MaxRequestsPerChild для MPM prefork равно 1000, а для MPM рабочего процесса — 0.

Q2: Сама концепция верна. Хотя MaxRequestWorkers и ThreadsPerChild не являются директивами prefork mpm.

Вопрос 3: Родитель продолжает прослушивать дополнительные дочерние префорки по мере необходимости и делегирует прослушивание им, чтобы они обслуживали входящие запросы на подключение.

Хороший способ преодолеть ограничение соединения prefork 1 child/1 — включить KeepAlive и его поддирективы. Это позволит клиентам/браузерам выдавать много одновременных запросов GET, чтобы они могли получать все элементы страницы через 1 TCP-соединение. Это уменьшает задержку, поскольку резко сокращает эти дорогостоящие рукопожатия TCP. В настоящее время большинство браузеров поддерживают функцию Keep-Alive.

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

person MFIHRI    schedule 24.02.2017