2015-05-06 5 views
1

ОК, это на серии очень загруженных серверов Apache 2.4 с использованием prefork MPM, за AWB ELB. Поскольку мы отстаем от ELB, глупо не иметь keepalives, однако мы бы хотели, чтобы дочерние процессы регулярно перерабатывались. Прежде чем включать keepalives, настройка MaxConnectionsPerChild справилась с этим. Но с keepalives, по существу, существует только одно соединение, поэтому MaxConnectionsPerChild будет несколько неэффективным. FWIW, серверы слишком заняты для KeepAliveTimeout или похожи на то, что когда-либо пинают - обычно они получают несколько сотен запросов в секунду, 24/7, по существу, без простоя.Взаимодействие между MaxKeepAliveRequests и MaxConnectionsPerChild

Кроме того, почти все запросы являются атомарными без последующих запросов на изображения, CSS и т. Д. Настоящая причина сохранения в том, что все соединения связаны с одним источником, балансировщиком нагрузки.

Так вот вопрос ... Мы думали, что для того, чтобы время от времени рецикла дочерних процессов, мы могли бы использовать настройки, как это:

KeepAlive    On 
KeepAliveTimeout  20 
MaxKeepAliveRequests 1500 
MaxConnectionsPerChild 4 

Опять же, KeepAliveTimeout не имеет в принципе никакого эффекта. Поэтому мышление заключается в том, что при этой настройке постоянное соединение будет сбрасываться каждые 1500 запросов, а затем после 4 сбрасываний ребенок будет перерабатываться, то есть; перерабатывайте дочерний процесс каждые 6000 запросов. Однако это приводило к тому, что дочерние процессы перерабатывались примерно раз в минуту, что не соответствовало уровню трафика. В качестве теста мы изменили настройки на:

KeepAlive    On 
KeepAliveTimeout  20 
MaxKeepAliveRequests 6000 
MaxConnectionsPerChild 4 

Ожидая четырехкратного увеличения продолжительности жизни ребенка. Тем не менее, детские процессы теперь циклируются каждые 50 секунд до 2 минут без видимой картины.

Я начинаю думать, что эти две настройки не взаимодействуют, как я думал, они это сделали. Какие-нибудь идеи в этом? И/или метод «лучшей практики» для обеспечения периодической переработки детских процессов в этой ситуации?

+0

Вам посчастливилось выяснить это? – Eric

+0

Нет. И никаких ответов здесь (очевидно). –

ответ

0

Кажется, что ваш KeepAlive неактивен.

Я могу видеть на своем Apache, чем когда я устанавливал MaxKeepAliveRequests с 1500 до 6000, у меня есть четырехкратное увеличение продолжительности жизни (с постоянной скоростью запросов).

  • Вы уверены, что KeepAlive активен на apache? (по умолчанию: да).
  • Убедитесь, что включен режим балансировки нагрузки «keepalive».
  • Вы должны убедиться, что балансировщик нагрузки отправляет HTTP 1.1 запросы на apache (Keepalive соединения поддерживаются только по протоколу HTTP/1.1). Вы можете видеть это в журналах.