ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Затыки при отдаче статики



Валентин, спасибо. Видимо, я перепутал с BSD-шным sendfile...

Комментарий "он будет зваться ровно столько раз, сколько понадобиться
для отдачи всего файла" относится, судя по всему, именно к BSD? потому
что на Linux просто блокируется вызов до получения полного файла и
всё.

Используем небольшой свой модуль, который из имени файла делает, по
сути, range  и отдаёт ответ с кодом 200. Внутри он вызывает
ngx_http_output_filter, который занимается всем вводом-выводом, так
что "в кишки" мы не лезем.

Включать AIO - не вариант. Отсутствие RA снижает производительность
дисков очень значительно (даже при выставлении больших буферов -
видимо, за счёт RA RAID-контроллера, который тоже отключается) +
отсутствие sendfile прибавляет почти десяткок процентов system time на
и без того нагруженном сервере...

Итого либо переходить на FreeBSD, либо писать что-то своё/переделывать
существующее, что способно синхронно во много тредов отдавать файлы с
sendfile вместо nginx (тот же апач не умеет отдавать на range ответ
200 + нужно корректно работать с кэшом на HDD, который тормозит не
меньше) ....

Всем спасибо, война закончена ))


23 ноября 2013 г., 20:50 пользователь Валентин Бартенев
<vbart@xxxxxxxxx> написал:
> On Saturday 23 November 2013 18:54:38 Gelun, Artem wrote:
> [..]
>> До этого момента я убеждённо считал, что если файл открыт как O_NONBLOCK,
>> то sendfile будет неблокирующим и при недостатке данных вернёт EAGAIN.
>
> EAGAIN он вернет только когда заполнит буфер сокета.
>
> man sendfile
>
>        EAGAIN Nonblocking I/O has been selected using O_NONBLOCK and the write
>               would block.
>
>
>> Я ошибаюсь? или откуда может появиться время его выполнения в почти 8.7
>> секунды???....
>
> Ошибаетесь.
>
> sendfile() на Linux блокируется на чтении с диска, так же как и read().
>
> --
> Валентин Бартенев
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@xxxxxxxxx
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.