Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Проблема с keepalive
At Fri, 15 May 2009 19:06:24 +0400,
Alexander Sabourenkov <screwdriver@xxxxxxxxx> wrote:
>
> Здравствуйте.
>
> Ситуация:
>
> nginx-0.7.57 FreeBSD 7.2-RELEASE amd64 (E5410@xxxxxxx x2, 8G, em)
>
> ~900 запросов в секунду с десятка хостов
>
> При включенных keepalive практически все запросы идут по 10-15 соединениям,
> время
> их жизни явным образом не ограничивается. В результате имеем:
> - все запросы обрабатываются одним worker-ом
> - этот worker кушает прилично CPU и памяти, причем со временем всё больше и
> больше, доедает одно ядро до 100% за примерно час.
> - все остальные worker-ы отдыхают.
>
> Подозреваю, что где-то там есть нечто, характеризующееся количеством
> прошедших
> запросов по соединению (n), требующее O(n) времени на каждом запросе, O(n) gf
> и
> сносимое только при закрытии соединения. Что бы это могло быть?
>
> Даже если бы оно так не текло, проблема повышения времени ответа worker-a,
> кушающего 100% CPU из-за небольшого количества таких соединений остается.
>
> Кроме костыля, аналогичного апачевскому MaxKeepAliveRequests, что-то ничего
> не
> приходит в голову.
>
> С отключенным keepalive полёт нормальный.
>
> Вопрос, собственно, такой: куда копать?
>
если вы хотите разбрасывать более равномерно соеденения по воркерам
попробуйте сказать accept_mutex off; в блоке events.
Про frebsd ? не знаю, но для Linux ? такое поведение
нормально. Т.к. несколько воркеров слушают один сокет ? зачем будить
каике-то воркеры, если есть сейчас процесс который может его принять? :)
--
wbr, Kirill
|