Re: Непонятна работа limit_rate

Иван Мишин simplebox66 на gmail.com
Ср Окт 7 15:10:01 UTC 2020


При директивах
limit_rate_after 150000k; #150Mb
limit_rate 2048k;
proxy_max_temp_file_size 0;
Скачивание происходит так как и ожидается, без обрывов и прочего, а так же
обрезается скорость правильным образом в соответствии с  директивами
limit_rate_after и  limit_rate.

Но вот при такой конфигурации:
limit_rate_after 150000k; #150Mb
limit_rate 2048k;
proxy_max_temp_file_size 6144m;

Поведение не понятно. При таких параметрах директив работает так -
скачивается 150Мб и затем обрыв. Почему?

ср, 7 окт. 2020 г. в 18:07, Иван Мишин <simplebox66 на gmail.com>:

> При директивах
>
> вт, 6 окт. 2020 г. в 17:16, Maxim Dounin <mdounin на mdounin.ru>:
>
>> Hello!
>>
>> On Tue, Oct 06, 2020 at 10:42:47AM +0300, Evgeniy Berdnikov wrote:
>>
>> > On Mon, Oct 05, 2020 at 10:24:17PM +0300, Alexey wrote:
>> > > День добрый!
>> > >
>> > > Вы качаете файл, получаемых от прокси апстрима?
>> > >
>> https://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_max_temp_file_size
>> > >
>> > > Вы упираетесь в 1Гб временного файла. когда качается быстро, он
>> > > вообще в темп не пишется, если файл прилетает от апстрима быстрее
>> > > чем забираем, то он уже пишется во временный файл. вы успеваете
>> > > скачать столько, сколько прилетает до начала записи во временный
>> > > файл + макс размер файла.
>> >
>> >  Наличие лимита на размер временного файла это что, повод обрывать
>> закачку?
>>
>> Наличие лимита - ни разу не повод обрывать закачку, nginx её и не
>> обрывает.
>>
>> Другой вопрос, что если буфер забит - nginx'у некуда читать
>> дополнительные данные, и в результате бэкенд может закрыть
>> соединение по таймауту до того, как содержимое временного файла
>> будет отдано клиену и соответственно nginx сможет дальше читать
>> что-либо от бэкенда.
>>
>> При заявленном ограничении скорости в 2 мегабайта в секунду -
>> отправка клиенту гигабайта временных данных займёт секунд 500
>> минимум.  Если при этом с бэкенда эти данные летят по гигабитному
>> каналу со скоростью 100 мегабайт в секунду - прилетят они секунд за
>> 10.  То есть между nginx'ом и бэкендом 490 секунд ничего не будет
>> происходить.  Шансов на то, что бэкенд дождётся при настройках по
>> умолчанию - никаких.
>>
>> Соответственно нужно:
>>
>> - увеличить временный файл, чтобы ответы влезали;
>>
>> - или уменьшить временный файл, чтобы его содержимое могло
>>   отправиться до того, как сработает таймаут на бэкенде.
>>
>> Ну либо настраивать таймауты на бэкенде и/или ограничение
>> скорости, чтобы опять же временный файл мог отправиться до того,
>> как сработает таймаут на бэкенде.
>>
>> Вообще, когда речь идёт о том, что проксируются большие файлы -
>> одним из лучших решений может быть просто выключенная буферизация
>> на диск, "proxy_max_temp_file_size 0;".  Это позволяет избежать не
>> только проблем с таймаутами на бэкенде, но и траты ресурсов на
>> disk i/o, а равно проблем с переполнением диска под временные
>> файлы при большом количестве одновременных запросов.
>>
>> [...]
>>
>> --
>> Maxim Dounin
>> http://mdounin.ru/
>> _______________________________________________
>> nginx-ru mailing list
>> nginx-ru на nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20201007/e8eefd86/attachment-0001.htm>


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