Постоянные обрывы коннектов

Igor Sysoev is at rambler-co.ru
Wed Jul 15 11:18:59 MSD 2009


On Wed, Jul 15, 2009 at 06:47:32AM +0400, Maxim Dounin wrote:

> Hello!
> 
> On Tue, Jul 14, 2009 at 10:42:23PM +0200, Anton Kuznetsov wrote:
> 
> > Тоже спасибо :)
> > Поставил 8.0.5 - проблему опять видно.
> > 
> > В принципе конфиг работает - 2 запроса в минуту и остальные ждут. Но.. масса
> > строчек в логе с размером ответа 60к-65к.
> 
> Те "строчки в логе с размером ответа 60к-65к", которые вы до сих 
> пор приводили для nginx'а с наложенным патчем, не являются 
> проблемой в nginx'е, а лишь отражают поведение ваших 
> пользователей.

У меня ощущение, что 60-65К (или 32К, если kernel send буфер такого размера),
возникают так - многопотоковая качалка запрашивает файл, берёт из
ответа длину, закрывает соединение. А потом начинает тянуть в несколько
потоков, исходя из длины. Можно поставить эксперементы или посмотреть
в исходники, если они есть.

> Судя по описываемым симптомам - очень может быть что они просто не 
> дожидаются ответа и закрывают соединение.
> 
> В качестве проверки можно попробовать убрать реальный сервер за 
> proxy_pass (можно в том же nginx'е и видимо с 
> proxy_max_temp_file_size 0 чтобы диск лишнего не грузить) - будет 
> работать детектирование закрытия соединения клиентом, и подобные 
> запросы до диска не дойдут.  В логах должно появиться что-то вроде 
> "kevent() reported that client closed prematurely connection" на 
> уровне info.
> 
> Maxim Dounin
> 
> > Отключаю все limit_req - пропадают эти ненавистные строчки 60к-65к, но
> > начинается основная проблема - просто долбежка запросами от качалок, ответы
> > там разных размеров, но в основном до 1м. Что меня не очень устраивает, ни
> > по распухающим логам, ни по эффективности работы сервера. Не хочу чтобы
> > нжинкс только и делал что открывал коннекты и закрывал. Десятками в секунду.
> > И еще чтобы он не читал по 500к-1000к с диска в буфер из которого потом
> > отдает только 150к. Хочу чтобы качали нормальные люди, которые могут
> > настроить качалку в один поток. Остальные пусть смотрят на свои 2000
> > ESTABLISHED коннектов в которые ничего не отдается.
> > 
> > Может я неправильным путем иду?
> > Исходная задача - отдавать в один поток, остальные подвешивать, стреляя 503
> > крайне медленно и долго.
> > Кол-во запросов в минуту тоже ограничить, превышение аналогично подвешивать.
> > 
> > Антон.
> > 
> > 
> > 2009/7/14 Maxim Dounin <mdounin at mdounin.ru>
> > 
> > > Hello!
> > >
> > > On Tue, Jul 14, 2009 at 09:24:48PM +0200, Anton Kuznetsov wrote:
> > >
> > > > Ну раз уж взялся ковырять проблему хотел и обновиться.. Ну делать нечего,
> > > > пропатчил 0.7.61
> > > >
> > > > Собственно  возвращаясь к сути проблемы - на разных серверах все сильно
> > > по
> > > > разному.
> > > > Вот логи с сервера где проблему побороть не удалось.
> > > > FREEBSD 7.0-RELEASE
> > > > nginx version: nginx/0.7.61
> > > > Патч наложен.
> > >
> > > [...]
> > >
> > > > 2009/07/14 23:02:57 [debug] 89383#0: *969 limit_req: -2 1.000
> > > > 2009/07/14 23:02:57 [warn] 89383#0: *969 delaying request, excess: 1.000,
> > > by
> > > > zone "avi", client: 95.24.28.67, server: inka.arjlover.net, request:
> > > "GET
> > > > /multiki/ostrov.osh
> > > > ibok.avi HTTP/1.0", host: "inka.arjlover.net", referrer: "
> > > > http://multiki.arjlover.net/info/ostrov.oshibok.avi.html"
> > > > 2009/07/14 23:02:57 [debug] 89383#0: *969 event timer add: 80:
> > > > 1000:2057662719
> > > > 2009/07/14 23:02:58 [debug] 89383#0: *969 event timer del: 80: 2057662719
> > > > 2009/07/14 23:02:58 [debug] 89383#0: *969 http run request:
> > > > "/multiki/ostrov.oshibok.avi?"
> > > > 2009/07/14 23:02:58 [debug] 89383#0: *969 limit_req delay
> > >
> > > [...]
> > >
> > > Патч не наложен.  Тут должно быть написано "limit_req delay patched 2".
> > >
> > > Maxim Dounin
> > >
> > >
> > 
> > 
> > -- 
> > Best regards,
> > Anton Kuznetsov.

-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list