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;
--
Игорь Сысоев
http://sysoev.ru