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

Igor Sysoev is at rambler-co.ru
Fri Apr 13 19:15:17 MSD 2007


On Fri, Apr 13, 2007 at 05:50:13PM +0400, Александр Ворона wrote:

> Igor Sysoev пишет:
> 
> >У меня есть одно подозрение, может, это сломали не sendfile, а
> >ioctl(FIONBIO). Можно проверить так:
> >
> >../configure ... --with-cc-opt="NGX_HAVE_FIONBIO=0"
> проверил другое. Пропатчил sendfile() в ядре, дабы он при неблокируемом 
> сокете перебивал count у sendfile на константу 128000. Патч вложил
> 
> При отдаче нжинксом файла с диска( не из кэша!)затык после 3-4 
> сендфайлов, а точнее после первого отданого на 128000
> dmesg
> [ 5654.554353] ask 1466761216   <4>real 128000
> [ 5654.568565] sended 20576 bytes
> [ 5654.568778] ask 1466740640   <4>real 128000
> [ 5654.570062] sended 83352 bytes
> [ 5654.570285] ask 1466657288   <4>real 128000
> [ 5654.573701] sended 111136 bytes
> [ 5654.573914] ask 1466546152   <4>real 128000
> [ 5654.575222] sended 128000 bytes
> затык
> wget -Y off -O /dev/null http://192.168.78.1:81/2.tmp
> --14:24:44--  http://192.168.78.1:81/2.tmp
>            => `/dev/null'
> Устанавливается соединение с 192.168.78.1:81... соединение установлено.
> Запрос HTTP послан, ожидается ответ... 200 OK
> Длина: 1 466 761 216 (1.4G) [application/octet-stream]
> 
>  0% [ 
>                  ] 343 064       --.--K/s
> 
> 
> При отдаче lighhttpd через linux-sendfile  всё ок и достигнут нужный 
> эффект  - нет блокировки при отдаче - параллельные коннекты принимаются 
> и отдаются.
> dmesg
> [ 3986.823916] ask 146274204    <4>real 128000
> [ 3986.826964] sended 128000 bytes
> [ 3986.827061] ask 146146204    <4>real 128000
> [ 3986.828933] sended 128000 bytes
> [ 3986.829015] ask 146018204    <4>real 128000
> [ 3986.830907] sended 128000 bytes
> [ 3986.830991] ask 145890204    <4>real 128000
> wget -Y off -O /dev/null http://192.168.78.1:82/3.tmp
> --14:31:48--  http://192.168.78.1:82/3.tmp
>            => `/dev/null'
> Устанавливается соединение с 192.168.78.1:82... соединение установлено.
> Запрос HTTP послан, ожидается ответ... 200 OK
> Длина: 4 294 967 296 (4.0G) [application/octet-stream]
> 
> 45% [===================================> 
>               ] 1 934 299 038   60.11M/s    ETA 00:38
> руками оборвал закачку
> 
> попробовал апач - тоже всё ок - отдаёт
> 
> strace
> poll([{fd=8, events=POLLOUT, revents=POLLOUT}], 1, 300000) = 1
> sendfile(8, 9, [811668553], 656370615)  = 128000
> poll([{fd=8, events=POLLOUT, revents=POLLOUT}], 1, 300000) = 1
> sendfile(8, 9, [811796553], 656242615)  = 128000
> poll([{fd=8, events=POLLOUT, revents=POLLOUT}], 1, 300000) = 1
> sendfile(8, 9, [811924553], 656114615)  = 128000
> poll([{fd=8, events=POLLOUT, revents=POLLOUT}], 1, 300000) = 1
> sendfile(8, 9, [812052553], 655986615)  = 128000
> 
> dmesg
> [ 6921.055356] ask 455282615    <4>real 128000
> [ 6921.057216] sended 128000 bytes
> [ 6921.057313] ask 455154615    <4>real 128000
> [ 6921.059175] sended 128000 bytes
> [ 6921.059261] ask 455026615    <4>real 128000
> [ 6921.062314] sended 128000 bytes
> [ 6921.062402] ask 454898615    <4>real 128000
> [ 6921.064285] sended 128000 bytes
> 
> 
> пробовал проверить также vsftpd, но он не выставляет неблокирующий режим 
> :), ибо не нужно ему это
> 
> 
> по какому критерию nginx прекращает передачу после того, как ядерный 
> sendfile() передал ровно столько, сколько его попросил патч ?

Нужно собрать nginx с отладкой и прислать мне лог.


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





More information about the nginx-ru mailing list