Re: Не полностью отдается файл клиенту

Maxim Dounin mdounin на mdounin.ru
Пт Июн 2 11:14:31 UTC 2017


Hello!

On Fri, Jun 02, 2017 at 03:06:08AM -0400, ingtar wrote:

> Добрый день!
> Столкнулся с непонятной проблемой. Имеется сервер для раздачи файлов
> клиентам. При большом кол-ве запросов иногда начинают происходить следующие
> вещи на стороне клиента - скачиваемый файл (через curl) отдается меньшего
> размера но ответ 200
> В утилите siege при 100 конкурентных пользователях выглядит так:
> 
> HTTP/1.1 200    26.85 secs: 13925686 bytes ==> GET 
> /test/212879312926726118532324622460834138521.xml
> HTTP/1.1 200    27.62 secs: 13925686 bytes ==> GET 
> /test/212879312926726118532324622460834138521.xml
> HTTP/1.1 200    28.38 secs: 13925686 bytes ==> GET 
> /test/212879312926726118532324622460834138521.xml
> HTTP/1.1 200    29.20 secs: 13925686 bytes ==> GET 
> /test/212879312926726118532324622460834138521.xml
> HTTP/1.1 200    29.96 secs: 13925686 bytes ==> GET 
> /test/212879312926726118532324622460834138521.xml
> HTTP/1.1 200    30.79 secs: 13925686 bytes ==> GET 
> /test/212879312926726118532324622460834138521.xml
> HTTP/1.1 200    31.54 secs: 13925686 bytes ==> GET 
> /test/212879312926726118532324622460834138521.xml
> HTTP/1.1 200    91.80 secs: 11313152 bytes ==> GET 
> /test/212879312926726118532324622460834138521.xml
> HTTP/1.1 200    91.82 secs:  249483 bytes ==> GET 
> /test/212879312926726118532324622460834138521.xml
> HTTP/1.1 200    91.84 secs:  270971 bytes ==> GET 
> /test/212879312926726118532324622460834138521.xml
> HTTP/1.1 200    91.86 secs:  257541 bytes ==> GET 
> /test/212879312926726118532324622460834138521.xml
> HTTP/1.1 200    91.88 secs:  265599 bytes ==> GET 
> /test/212879312926726118532324622460834138521.xml
> HTTP/1.1 200    91.89 secs:  262913 bytes ==> GET 
> /test/212879312926726118532324622460834138521.xml
> 
> Как видно из времени ответа - он начинает держать клиента и потом закрывает
> коннект с 200 кодом. 
> Дебаг лог мне не помог, могу его приложить но он очень большой и найти
> именно проблемный коннект не получилось

Для начала отмечу, что 200 - это код ответа, который отправляется 
клиенту в самом начале, вместе с заголовками ответа.  Любые 
ошибки, которые происходят после этого, на код ответа не влияют.  
Чтобы узнать, были они или нет, нужно смотреть в лог ошибок.

Судя по цифрам, соединение было разорвано в процессе передачи тела 
ответа, видимо - по таймауту, клиентом или nginx'ом.  Из-за чего 
такое происходит - сложно сказать, возможно вы просто упрёрлись в 
сеть.

-- 
Maxim Dounin
http://nginx.org/


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