Назад | Перейти на главную страницу

MaxClients постоянно превосходит сервер веб-приложений

Я запускаю веб-приложение на машине CentOs 6 с 4 гигабайтами памяти и 3 ядрами процессора (Intel Xeon 2.9 Ghz).

Каждое утро с 8:30 до 9:30 (что совпадает с периодом времени, когда большинство людей приходят на работу и начинают использовать это приложение), Apache перестает принимать любые новые запросы, поскольку параметр MaxClients пересекает 256 (что было по умолчанию).

В любой момент у меня есть 15 пользователей, использующих приложение, и время активности в этом приложении - с 8:30 до примерно 16:30.

Чтобы попытаться понять, что может быть причиной этого MaxClients настройки, которые нужно превзойти, я начал отслеживать, сколько запросов моя машина делает серверу во время и после загрузки страницы. Около 40 минут мониторинга привели к следующему:

Как можно видеть, мое веб-приложение использует CometChat, чтобы пользователи могли взаимодействовать друг с другом, и ПОСЛЕ загрузки страницы вся активность исходит от CometChat, выполняющего запросы AJAX для получения обновлений.

Только что я запустил эту команду в оболочке, чтобы получить количество apache запущенные потоки:

pidof httpd | wc -w

Результат был: 245. Это число постоянно растет после перезапуска Apache. Средняя (резидентная) память, занятая этими процессами, составляет около 18M.

245 процессов с 18 МБ на процесс приводят к использованию более 4 гигабайт оперативной памяти.

Теперь по моим вопросам:

Для нас это время низкой загруженности. В ближайшие месяцы трафик будет только увеличиваться. Любая помощь приветствуется!

Очень часто процесс httpd все еще присутствует, но не обслуживает клиентские запросы.

Вы пытались увеличить количество MaxClients и ServerLimit при уменьшении MaxRequestsPerChild?

Если вы не можете увеличить количество MaxClients из-за памяти, попробуйте ограничить StartServers и MinSpareServer MaxSpareServer до их минимума (где-то около обоих 5).

Уменьшение значения MaxRequestsPerChild будет перезапускать процесс намного быстрее, но это не позволит принимать больше клиентов одновременно, но будет Помогите избегать перегрузки в случае, если клиент продолжает оставаться на связи (либо на уровне TCP, либо с Keep-Alive).

Вы также можете попытаться отключить Keep-Alive, чтобы гарантировать, что каждый запрос будет правильно закрыт (а затем переработан)

Наконец, если вы не можете настроить и у вас одновременно 256 клиентов, вам следует подумать, как увеличить объем памяти.