Длинный опрос с Ajax и PHP - Apache зависает
Мы пытаемся внедрить сервис уведомлений на основе длинных опросов в ERP нашей компании. Аналогично уведомлениям в Facebook.
Используемые технологии:
PHP сtimeout
установить на 60 секунд и 1 секундуsleep
в каждой итерации цикла.JQuery для обработки AJAX.Apache как веб-сервер.После почти месяца кодирования мы пошли в производство. Через несколько минут после развертывания нам пришлось все откатить. Оказалось, что наш сервер (8 ядер) не может обрабатывать длинные запросы от 20 сотрудников, используя ~ 5 вкладок браузера каждая. Например: пользователь открыл 3 вкладки с нашей ERP, с одним длинным опросом AJAX на каждой вкладке. Открытие 4-й вкладки невозможно - она зависает до тех пор, пока один из предыдущих 3 не будет убит (и, следовательно, AJAX остановлен).
«Apache ограничения», подумали мы. Итак, мы пошли гуглить. Я нашел некоторую информацию о модулях и конфигах Apache MPM, поэтому попробовал. Наш сервер используетprefork
МПМ, аapachectl -l
показал нам. Поэтому я изменил несколько строк в конфигурации, чтобы они выглядели примерно так:
<IfModule mpm_prefork_module>
StartServers 1
MinSpareServers 16
MaxSpareServers 32
ServerLimit 50%
MaxClients 150
MaxClients 50%
MaxRequestsPerChild 0
</IfModule>
Самое смешное, что он работает на моей локальной машине с похожим конфигом. На сервере это выглядит как Apache игнорирует конфигурацию, потому что сMinSpareServers
установите значение 16, после перезагрузки оно будет равно 8. Не знаю, что делать.