Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Ограничение соедин ений с backend
At Mon, 15 Jun 2009 13:33:26 +0400,
Vladimir Latyshev <latysheff@xxxxxxxxx> wrote:
>
> [1 <text/plain; KOI8-R (base64)>]
>
> [2 <text/html; KOI8-R (base64)>]
> В архиве нашел подобную тему, но решение неясно.
>
> Как известно, apach'у плохеет при большом количестве соединений. Предположим,
> нагрузочным
> тестированием выявлено, что некий сервис на apache+php тянет 100
> одновременных обращений,
> а при большей нагрузке - ложится. MaxClients ставим на сотню, но лишние
> соединения все
> равно приходят, висят в очереди (ListenBacklog), и де-факто получаем для всех
> 100%
> клиентов слишком долгое ожидание. Как побороть это в апаче - так и не
> придумал. Хочется
> сделать так, чтобы те, кому "повезло" получали ответ быстро сразу, а
> остальные - вежливый
> отлуп (еще быстрее, хехе).
>
> Возможно ли с помощью nginx ограничить глобально число активных соединений с
> бэкэндом при
> использовании директивы proxy_pass, а всем "лишним" выдавать некую статику?
> Можно попробовать выкрутиться так:
>
> limit_zone conn $myvar 100k;
> set $myvar 1; # константа, то есть ограничение для всех (глобально)
> limit_conn conn 100;
> error_page 503 =200 /sorry.html;
>
> Но этот вариант не устраивает, так как медленные соединения заблокируют
> доступ остальным,
> а апач будет по сути простаивать.
> Что еще можно придумать? Подозреваю, что я не первый задаюсь этим вопросом и
> решение уже
> существует :)
>
если apache и nginx на одной машине, то можно взять в руки:
http://catap.ru/blog/2009/05/29/nginx-loadavg_-and-more-or-less-in-if/
И сделать, что-то типо:
if ($loadavg_1m > 5) {
return 503;
}
--
wbr, Kirill
|