Несколько непонятностей по nginx

Igor Sysoev is at rambler-co.ru
Mon Apr 23 17:20:43 MSD 2007


On Sat, Apr 21, 2007 at 07:09:27PM +0400, Александр Ворона wrote:

> Igor Sysoev пишет:
> >Дело в том, что lighttpd не использует EPOLLET, а nginx - использует.
> >Когда патч в ядре ограничивает объём передаваемых данных, то происходит
> >следующее - EPOLLET фиксирует состояние, что буфер свободен, об этом
> >сообщается приоложению (nginx'у), он делает sendfile. sendfile быстро
> >передаёт ограниченный объём, буфер по-видимому после этого полностью
> >свободный и новое событие не приходит.
> модифицировал немного патч
> -  res=*((int *)(&(sbuff[0])));
> +  res=104857600;
> 
> в результате имею затыкающийся после 100м-вого sendfile()'а nginx. Буфер 
> сокета выше 1М не поднимался. Подозреваю, что любое значение count у 
> sendfile(), меньшее оставшегося неотосланного количества байт в файле, 
> но приводящее к отдаче count байтов за один sendfile(), вызовет затык - 
> не приходит событие(передано ровно запрошенное количество байт, а не 
> меньше). В случае настроящего неблокирующегося sendfile() событие должно 
> было бы прийти :) Похожая ситуация и с rtsig. С poll и select всё 
> работает как и ожидалось.

А если поставить "limit_rate  1M" ? В этом случае nginx сам больше 1M
за раз передавать не будет.


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





More information about the nginx-ru mailing list