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

Apache перестает обслуживать запросы при увеличении количества подключений

Возможный дубликат:
Проблема с производительностью Apache: после «1000 детей» Apache больше не отвечает на HTTP-запросы. Не проблема с MaxClients?

Значения для MaxClients, ServerLimit параметры довольно высоки (4000). Доступная оперативная память на сервере слишком высока (~ 8 ГБ). Средняя загрузка остается ниже 1 на 24-ядерном ЦП. Но когда количество посетителей на сайте увеличивается, apache просто перестает обслуживать запросы. Журнал ошибок apache пуст, и в журнале доступа больше не поступает запросов.

Перезапуск apache заставляет его снова работать, пока количество запросов снова не увеличится.

Есть идеи, с чего начать?

ОБНОВИТЬ Получение следующих ошибок в журнале ошибок apache при запуске с LogLevel Debug [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 32 children, there are 479 idle, and 1027 total children

У вас может быть узкое место где-то еще - например, база данных, общий диск или что-то еще

Я бы попытался разделить обслуживание скриптов PHP и статических файлов.

Вы можете очень эффективно обслуживать статические файлы с помощью worker MPM и даже лучше с event MPM доступны для httpd 2.4+. Но вы не можете использовать этот MPM для обслуживания сценариев PHP, поскольку PHP не является потокобезопасным.

Для PHP вы можете запустить отдельный экземпляр httpd (я запускаю его на своем сервере с Listen 127.0.0.2:488) и настройте главный сервер как обратный прокси:

ProxyPreserveHost On
DocumentRoot /var/www/html
RewriteEngine On
RewriteCond /var/www/html%{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteRule ^/(.*) http://127.0.0.2:488/$1 [P,L]

С участием mod_remoteip (опять же - доступно с httpd 2.4) это было бы действительно прозрачно для PHP-скрипта.

Или используйте, например, php-fpm.

Таким образом, запрос статических файлов, постоянных соединений HTTP и т. Д. Не будет использовать ваш ограниченный дочерний пул сервера и будет использовать часть оперативной памяти.

Сообщение об ошибке дает ответ - увеличьте StartServers или Min/MaxSpareServers. Вам также может потребоваться посмотреть MaxClients.