Постоянные обрывы коннектов
Maxim Dounin
mdounin at mdounin.ru
Mon Jul 6 18:57:35 MSD 2009
Hello!
On Mon, Jul 06, 2009 at 02:54:41PM +0200, Anton Kuznetsov wrote:
> > > tcp_nodelay on;
> > > limit_req_zone $binary_remote_addr zone=avi:10m rate=5r/m;
> > > ....
> > > location ~* ^/film/.*\.(avi|mpg|gif|jpg)$ {
> > > limit_req zone=avi burst=5;
> > > ....
> >
> > Для того чтобы был limit_req ... nodealy - должно быть написано
> > limit_req ... nodelay. А не просто limit_req. Логично?
> >
>
> Мда, спасибо. :) надо еще раз прочитать матчасть и выучить все настройки где
> есть слово nodelay. :)
>
>
> > [...]
> >
> > > 2009/07/06 13:43:01 [debug] 62060#0: *117 free: 0829E200, unused: 56
> > > 2009/07/06 13:43:14 [error] 62100#0: *117 limiting connections by zone
> > > "one", client: 95.32.50.65, server: film.arjlover.net, request: "GET
> > > /film/vyzyvaem.ogon.na.sebja.2.avi HTTP/1.0", host: "ivanka.arjlover.net
> > ",
> > > referrer: "http://film.arjlover.net/film/"
> > >
> > > Последняя строчка непонятно как попала в этот grep по 117
> > > Все строчки про limit_req - убраны.
> >
> > Последняя строчка - это limit_conn. В целом нормальный такой
> > range запрос, отработал штатно, вернул в точности то что
> > запросили.
> >
>
> access.log:
> 220.231.30.195 - - [06/Jul/2009:13:42:56 +0400] GET /film/zerkalo.avi
> HTTP/1.1 XX 206 92546
>
> Вот это запросили? 92645 байтов? Как это возможно?
Да, именно это запросили. Я специально процитировал заголовк Range от
клиента. Возможно это с помощью протокола (сюрприз!) http, читать
RFC2616.
> Разрешен один поток, если
> бы это был последний кусок - было бы http 200, если он не последний, то...
Код ответа будет 200 если качали весь файл целиком. А если был
range-запрос - то код ответа будет 206. Вне зависимости от. У
вас явные проблемы с пониманием протокола http, перечитайте
RFC2616 на досуге.
> Даже не знаю, теоретически можно кончено делать такие запросы, но смысл? И
> какие качалки могут так делать? Как-то не верится, учитывая, что случается
> по прежнему 50 раз в минуту...
AFAIK, многие качалки *всегда* пытаются открывать много потоков,
раскидывая по ним запросы на разные куски. Если вы ограничили
количество потоков на стороне сервера - это никак не влияет на их
логику работы. По прежнему будут запрашиваться куски, только в
один поток.
> Недолго я радовался что все хорошо работает без limit_req - мне быстро
> напомнили зачем я это сделал, в целом все хорошо, но отдельные товарищи
> любят делать вот так:
>
> 193.232.126.36 - - [06/Jul/2009:16:33:39 +0400] GET /film/pyatyi.okean.avi
> HTTP/1.1 ZZ 206 1485423
> 193.232.126.36 - - [06/Jul/2009:16:33:43 +0400] GET /film/pyatyi.okean.avi
> HTTP/1.1 ZZ 206 2908171
> 193.232.126.36 - - [06/Jul/2009:16:33:46 +0400] GET /film/pyatyi.okean.avi
> HTTP/1.1 ZZ 206 1487151
> 193.232.126.36 - - [06/Jul/2009:16:33:46 +0400] GET /film/pyatyi.okean.avi
> HTTP/1.1 ZZ 206 776981
> 193.232.126.36 - - [06/Jul/2009:16:33:48 +0400] GET /film/pyatyi.okean.avi
> HTTP/1.1 ZZ 206 422760
> 193.232.126.36 - - [06/Jul/2009:16:33:48 +0400] GET /film/pyatyi.okean.avi
> HTTP/1.1 ZZ 206 782785
>
> Тоже не очень понимаю как это у них получается и зачем, но достает. :(
> Кстати неплохо заливает за одну секунду, еще бы без обрывов - цены б ему не
> было. :)
Смотрите внимательно - код ответа 206, это ответы на
range-запросы. Там нет обрывов скорее всего. Чтобы знать точно -
надо ещё и знать что именно запросили, т.е. логгировать заголовок
Range.
> Без nodelay играть с сотнями качалок в перестрелку 503 - не хочется, хочу
> держать коннект, мне кажется nginx это делает легко и красиво.
> Но насколько я понимаю - без патча это толком не работает?
Нет, без патча это не работает.
> Ни в 7 ни 8 версии патча нет?
Нет, ни в 0.7.*, ни в 0.8.* патча нет.
> Кстати, а можно как-то все коннекты что сверх лимита по коннектам тоже на
> удержание вешать? На этом фронте тоже идет перестрелка 503. :( Все что я
> смог сейчас сделать - повесить скорость 1b/s на 503.html - хоть как-то
> сдерживает это безумие, но хочется более красиво. И чтобы работало без
> патча. :)
Можно попробовать применить limit_req с задержкой для 503.
> Заморочка с пропатчиванием дюжины серверов и поддержанием патча в дальнейшем
> - как-то убивает весь энтузиазм. :(
За то время, что вы провели тут, тратя своё и чужое время - могли
бы уже две дюжины серверов пропатчить. Я уж не говорю про сделать
порт/пакет и накатить хоть на пару тысяч.
Maxim Dounin
More information about the nginx-ru
mailing list