Почесав затылок, пытаясь понять, почему мой сайт так медленно отвечает, хотя ресурсы сервера в порядке, я наконец проверил статус Apache и обнаружил:
78 requests/sec - 0.7 MB/second - 8.5 kB/request
256 requests currently being processed, 0 idle workers
Похоже, что мой apache буквально переполнен соединениями. Любой, кто пытается посетить мой сайт, попадает в «список ожидания», пока Apache снова не станет бесплатным.
Кажется, у меня есть два варианта.
A) Поднимите максимальное количество подключений выше 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
Включите обтекание текстом, если корзины для вставки выглядят странно.
Эта статья неточная; MaxClients
может быть увеличено до 256 при использовании MPM перед форком (это то, что, как я предполагаю, вы используете в настоящее время, исходя из вашего описания проблемы). Из документация:
Для непоточных серверов (например, prefork),
MaxClients
переводится в максимальное количество дочерних процессов, которые будут запущены для обслуживания запросов. Значение по умолчанию - 256; для его увеличения необходимо также поднятьServerLimit
.
ServerLimit
- это тот, у которого есть жестко скомпилированный предел, но он далеко позади того, чего вы когда-либо должны достичь, не сталкиваясь с каким-либо другим узким местом. Документация:
Есть жесткий предел
ServerLimit 20000
скомпилирован в сервер (для префорка MPM 200000). Это сделано, чтобы избежать неприятных эффектов, вызванных опечатками.
Итак, если вы хотите поднять свой клиентский лимит примерно до 512, тогда:
MaxClients 512
ServerLimit 512
Вы также должны посмотреть, какой MPM вы используете, поскольку MPM, отличные от prefork, лучше масштабируются. Видеть Вот Чтобы получить больше информации.
Я бы посоветовал вам использовать обратный прокси, что-то вроде nginx или lighttpd может обрабатывать гораздо больше соединений, чем apache. В зависимости от того, как ваши сайты используют htaccess, вы также можете использовать nginx / lighttpd с fcgi и полностью отказаться от apache.