После того, как я почесал голову, пытаясь понять, почему мой сайт реагирует так медленно, хотя ресурсы сервера в порядке, я наконец проверил состояние Apache и обнаружил:
78 requests/sec - 0.7 MB/second - 8.5 kB/request
256 requests currently being processed, 0 idle workers
Похоже, мой апач буквально перегружен связями. Любой, кто пытается посетить мой сайт, попадает в «список ожидания», пока Apache снова не освободится.
Кажется, у меня есть два варианта.
А) Поднимите максимальный предел подключений выше 256. Хотя в соответствии с этой статьей это не так просто:
По умолчанию параметр MaxClients имеет скомпилированный жесткий предел 256. Однако это можно изменить, перекомпилировав Apache. Некоторые дистрибутивы или хостинговые компании повышают этот лимит до очень высокого значения, например 512 или даже 1024, чтобы справиться с большими нагрузками.
Б) Найдите сценарии, которые занимают слишком много времени. Это кажется мне более сложным, так как большинство процессов Apache просто появляются, а затем снова исчезают. Кроме того, мои сайты PHP-скрипты оптимизированы довольно хорошо ... и опять же, ресурсы сервера в порядке:
Server load 2.69 (8 CPUs)
Memory Used 25.33% (2,039,108 of 8,048,804)
Swap Used 1.32% (54,156 of 4,095,992)
Какой вариант (если какой-либо из них) я должен выбрать и как мне это сделать?
РЕДАКТИРОВАТЬ
Дополнительная информация: Версия сервера: Apache / 2.2.23 (Unix) mod_ssl / 2.2.23 OpenSSL / 1.0.0-fips DAV / 2 mod_auth_passthrough / 2.1 mod_bwlimited / 1.4 FrontPage / 5.0.2.2635
HTTP Conf: http://pastebin.com/yBeLt6mP
Пример запроса на семейное предложение: http://pastebin.com/vzUVDMPR
Переключите Text-Wrap, если вставки появляются странно.
источник
Ответы:
Эта статья неточна;
MaxClients
может быть поднят выше 256 при использовании prefork MPM (что я предполагаю, что вы используете в настоящее время на основе вашего описания проблемы). Из документации :ServerLimit
это тот, у которого есть жестко скомпилированный лимит, но он далеко позади того, чего вы должны достичь, когда ваш сервер не столкнется с каким-либо другим узким местом. Документация :Итак, если вы хотите увеличить лимит клиента до 512, то:
Вы также должны взглянуть на то, какой MPM вы используете, поскольку MPM, отличные от prefork, лучше подходят для масштабирования. Смотрите здесь для получения дополнительной информации.
источник
httpd -l
. Я думаю, это означает, что я работаю с рабочим MPM?MaxClients
,ServerLimit
,ThreadsPerChild
иThreadLimit
. Можете ли вы предоставить свой текущий рабочий конфиг отhttpd.conf
?Я бы посоветовал использовать обратный прокси-сервер, например, nginx или lighttpd, который может обрабатывать гораздо больше соединений, чем apache. В зависимости от того, как ваши сайты используют htaccess, вы также можете использовать nginx / lighttpd с fcgi и forego apache полностью.
источник
httpd.conf
и ваше решение - извлечь большую часть программного обеспечения, которое у него работает, и заменить его ?! У каждого программного обеспечения есть свои проблемы, но необразованное неправильное использование приводит к худшим проблемам.