Я запускаю веб-приложение на машине 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 гигабайт оперативной памяти.
Теперь по моим вопросам:
MaxClients
установка, которую нужно превзойти?Для нас это время низкой загруженности. В ближайшие месяцы трафик будет только увеличиваться. Любая помощь приветствуется!
Очень часто процесс httpd все еще присутствует, но не обслуживает клиентские запросы.
Вы пытались увеличить количество MaxClients и ServerLimit при уменьшении MaxRequestsPerChild?
Если вы не можете увеличить количество MaxClients из-за памяти, попробуйте ограничить StartServers и MinSpareServer MaxSpareServer до их минимума (где-то около обоих 5).
Уменьшение значения MaxRequestsPerChild будет перезапускать процесс намного быстрее, но это не позволит принимать больше клиентов одновременно, но будет Помогите избегать перегрузки в случае, если клиент продолжает оставаться на связи (либо на уровне TCP, либо с Keep-Alive).
Вы также можете попытаться отключить Keep-Alive, чтобы гарантировать, что каждый запрос будет правильно закрыт (а затем переработан)
Наконец, если вы не можете настроить и у вас одновременно 256 клиентов, вам следует подумать, как увеличить объем памяти.