Что делать после удара ужасных 256 максимальных соединений Apache Limit

9

После того, как я почесал голову, пытаясь понять, почему мой сайт реагирует так медленно, хотя ресурсы сервера в порядке, я наконец проверил состояние 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, если вставки появляются странно.

kmoney12
источник
Статья, которую вы цитировали, ~ 6 лет. Изменения в программном обеспечении. Смотрите ответ Шейна.
Крис S
1
@ChrisS Еще более устарел - ограничение на скомпилированное число было 1.x (2.0 вышло в 2002 году), и статья даже явно ссылается на документы 2.0.
Шейн Мэдден

Ответы:

10

Эта статья неточна; MaxClientsможет быть поднят выше 256 при использовании prefork MPM (что я предполагаю, что вы используете в настоящее время на основе вашего описания проблемы). Из документации :

Для непоточных серверов (т. Е. Prefork) MaxClientsозначает максимальное количество дочерних процессов, которые будут запущены для обслуживания запросов. Значение по умолчанию - 256; чтобы увеличить его, вы также должны поднять ServerLimit.

ServerLimitэто тот, у которого есть жестко скомпилированный лимит, но он далеко позади того, чего вы должны достичь, когда ваш сервер не столкнется с каким-либо другим узким местом. Документация :

Существует жесткое ограничение на ServerLimit 20000скомпилированный сервер (для prefork MPM 200000). Это предназначено, чтобы избежать неприятных эффектов, вызванных опечатками.

Итак, если вы хотите увеличить лимит клиента до 512, то:

MaxClients 512
ServerLimit 512

Вы также должны взглянуть на то, какой MPM вы используете, поскольку MPM, отличные от prefork, лучше подходят для масштабирования. Смотрите здесь для получения дополнительной информации.

Шейн Мэдден
источник
Я вижу, что core.c и worker.c запущены httpd -l. Я думаю, это означает, что я работаю с рабочим MPM?
kmoney12
@hellohellosharp Действительно - в этом случае, вы хотите настроить потенциально ваши MaxClients, ServerLimit, ThreadsPerChildи ThreadLimit. Можете ли вы предоставить свой текущий рабочий конфиг от httpd.conf?
Шейн Мэдден
Да ... есть ли опасность опубликовать это публично? Надеюсь, что нет, вот оно: pastebin.com/yBeLt6mP
kmoney12
Нет, нет проблем с размещением большинства файлов httpd.conf. Просто убедитесь, что у вас нет чего-то странного, такого как комментарии с паролями / именами пользователей и т. Д. Иногда они появляются в разделах конфигурации прокси и т.п. Многим людям нравится редактировать IP-адреса и доменные имена, просто чтобы они не привлекали внимание
Chris S
1
модуль статуса может показать вам эти детали.
ETL
-1

Я бы посоветовал использовать обратный прокси-сервер, например, nginx или lighttpd, который может обрабатывать гораздо больше соединений, чем apache. В зависимости от того, как ваши сайты используют htaccess, вы также можете использовать nginx / lighttpd с fcgi и forego apache полностью.

Shoshomiga
источник
4
В самом деле?? Ему нужно добавить две строки конфигурации, httpd.confи ваше решение - извлечь большую часть программного обеспечения, которое у него работает, и заменить его ?! У каждого программного обеспечения есть свои проблемы, но необразованное неправильное использование приводит к худшим проблемам.
Крис С
В конечном счете, nginx может обрабатывать более активные соединения, и OP должен решать, что использовать, я просто выдвинул свое предложение.
Шошомига