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

Igor Sysoev is at rambler-co.ru
Sat Apr 21 16:31:07 MSD 2007


On Sat, Apr 21, 2007 at 03:05:44PM +0400, Александр Ворона wrote:

> Igor Sysoev пишет:
> >Нужно собрать nginx с отладкой и прислать мне лог.
> 
> На всякий случай попробовал сборку с 
> --with-cc-opt="-DNGX_HAVE_SENDFILE64=0" . strace'ом видел что вызывается 
> именно sendfile(), а не sendfile64().
> Результат такой же. Апач и лайтхтппд отдают через sendfile(), нжинкс - 
> затыкается.
> Попробовал на чистом ядре сделать аналогичный патч на нжинкс - результат 
> тот же. Патч вложил.  Можете проверить его на [не]работоспособность? У 
> меня нжинкс затыкается.

Дело в том, что lighttpd не использует EPOLLET, а nginx - использует.
Когда патч в ядре ограничивает объём передаваемых данных, то происходит
следующее - EPOLLET фиксирует состояние, что буфер свободен, об этом
сообщается приоложению (nginx'у), он делает sendfile. sendfile быстро
передаёт ограниченный объём, буфер по-видимому после этого полностью
свободный и новое событие не приходит.

Если же EPOLLET не используется, то состояния не фиксируются, а
всё время проверяется свободный объём буфера - поэтому lighttpd
с этим патчем работает нормально. Что касается Апача, то там вообще
используется блокирующийся sendfile.


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





More information about the nginx-ru mailing list