Возможный дубликат:
Проблема с производительностью 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
.