Re: "Замирает" передача статичного файла

Валентин Бартенев vbart at nginx.com
Fri Mar 28 16:04:23 UTC 2014


On Friday 28 March 2014 18:47:27 Алексей Щуров wrote:
> Проблема заключается в периодическом "замирании" передачи статичного
> файла, возникает в основном на высокоскоростных соединениях.
> С включенным limit_rate 200k я ни разу не поймал проблему.
> Включил debug_connection для одного тестового клиента, далее
> отфильтрованные записи из лога (могу полный лог отправить если надо):
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 HTTP/1.1 200 OK
> Server: nginx/1.4.7
> Date: Fri, 28 Mar 2014 12:09:44 GMT
> Content-Type: application/octet-stream
> Content-Length: 17775749
> Connection: keep-alive
> ETag: "532070bd-10f3c85"
> Last-Modified: Fri, 2 Jan 1970 00:00:01 GMT
> Accept-Ranges: bytes
> 
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 write new buf t:1 f:0
> 00000000072252E8, pos 00000000072252E8, size: 260 file: 0, size: 0
> ...
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 write old buf t:1 f:0
> 00000000072252E8, pos 00000000072252E8, size: 260 file: 0, size: 0
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 write new buf t:0 f:1
> 0000000000000000, pos 0000000000000000, size: 0 file: 0, size:
> 17775749
> ...
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 writev: 260
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 sendfile: @0 17775749
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 sendfile: 3440640, @0
> 3440640:17775749
> ...
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 write old buf t:0 f:1
> 0000000000000000, pos 0000000000000000, size: 0 file: 3440640, size:
> 14335109
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 http write filter: l:1
> f:0 s:14335109
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 http write filter limit 0
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 sendfile: @3440640 14335109
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 sendfile() is not ready
> (11: Resource temporarily unavailable)
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 sendfile: -1, @3440640 0:14335109
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 http write filter 0000000007225478
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 http copy filter: -2 "/test.bin?"
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 http writer output
> filter: -2, "/test.bin?"
> 2014/03/28 16:09:44 [debug] 22512#0: *102725 event timer: 154, old:
> 1396008594706, new: 1396008594706
> ...
> 2014/03/28 16:09:54 [debug] 22512#0: *102725 event timer del: 154: 1396008594706
> 2014/03/28 16:09:54 [debug] 22512#0: *102725 http run request: "/test.bin?"
> 2014/03/28 16:09:54 [debug] 22512#0: *102725 http writer handler: "/test.bin?"
> 2014/03/28 16:09:54 [info] 22512#0: *102725 client timed out (110:
> Connection timed out) while sending response to client, ...

Из лога видно, что клиент отвалился по таймауту, тех 10 секунд
что вы поставили в send_timeout явно не достаточно, вероятно клиент
не успевает потреблять с такой скоростью.

Значение по умолчанию там 60 секунд, зачем трогали?

> 
> В общем как мне кажется проблема где-то около "sendfile() is not ready
> (11: Resource temporarily unavailable)"
> Похожая ситуация возникает с sendfile off, но уже "writev() not ready
> (11: Resource temporarily unavailable)"
[..]

Эти сообщения - часть нормальной работы: сокетный буфер заполнился,
писать больше некуда.

--
Валентин Бартенев


Подробная информация о списке рассылки nginx-ru