On Tue, Apr 24, 2007 at 02:24:49AM +0400, Igor Sysoev wrote:
> On Mon, Apr 23, 2007 at 08:16:12PM +0300, Александр Ворона wrote:
>
> > Igor Sysoev пишет:
> > >On Mon, Apr 23, 2007 at 07:15:17PM +0300, Александр Ворона wrote:
> > >
> > >>Igor Sysoev пишет:
> > >>
> > >>>А если поставить "limit_rate 1M" ? В этом случае nginx сам больше 1M
> > >>>за раз передавать не будет..
> > >>но он же и будет лимитировать скорость в 1М :)
> > >>А проблема имеет место только в случае когда отдача по сети быстрее чем
> > >>диск - nonblock не даёт ничего тогда
> > >
> > >Ну, можно поставить 10M.
> >
> > Чистое ядро 64bit, чистый nginx, limit_rate 10М, отдача 4G файла с диска
> > по 1G линку.
> > Наблюдаются замирания закачки после тех моментов, когда sendfile выслал
> > ровно столько сколько его запросили.
> > также проблему длинных sendfile не решило :)
> > sendfile(11, 14, [1647065810], 187942190) = 187942190
> > epoll_wait(13, {}, 512, 17924) = 0
> > sendfile(11, 14, [1835008000], 220200960) = 220200960
> > epoll_wait(13, {}, 512, 21001) = 0
> > sendfile(11, 14, [2055208960], 251658240) = 251658240
> >
> > Отдача естественно рывками идёт. Средняя скорость в итоге 9.41М
>
> Можно попробовать прилагаемый патч. Он ограничивает размер передаваемых
> данных за один раз 128K без ограничения скорости.
>
> Настраивается в src/os/unix/ngx_linux_init.c
>
> off_t ngx_linux_sendfile_limit = 128 * 1024;
Скорее всего, нужно поправить в ngx_http_write_filter_module.c:
- ngx_add_timer(c->write, 0);
+ ngx_add_timer(c->write, 1);
--
Игорь Сысоев
http://sysoev.ru