Взаимодействие между MaxKeepAliveRequests и MaxConnectionsPerChild

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

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

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

KeepAlive               On
KeepAliveTimeout        20
MaxKeepAliveRequests    1500
MaxConnectionsPerChild  4

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

KeepAlive               On
KeepAliveTimeout        20
MaxKeepAliveRequests    6000
MaxConnectionsPerChild  4

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

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


person Matt M    schedule 06.05.2015    source источник
comment
вам повезло разобраться в этом?   -  person Eric    schedule 21.07.2015
comment
Неа. И никаких ответов здесь (очевидно).   -  person Matt M    schedule 29.07.2015


Ответы (1)


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

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

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