Re: Скачкообразный рост потребляемой памяти при включении slice

Maxim Dounin mdounin на mdounin.ru
Вт Авг 2 11:05:10 UTC 2016


Hello!

On Tue, Aug 02, 2016 at 04:43:44AM -0400, Zaynullin wrote:

> Тогда скажите, пожалуйста, на что будет использоваться память, если все
> запросы и соответственно подзапросы завершатся?

Если все запросы завершаться - то память использоваться не будет 
(и будет освобождена), однако с точки зрения ядра может оставаться 
выделенной nginx'у.  Зависит от поведения и настроек системного 
аллокатора, а равно от размеров используемых буферов.

Одна из основных проблем при использовании slice-фильтра состоит в 
том, что nginx не умеет повторно использовать буфера из 
подзапросов, и для каждого подзапроса выделяются свои 
proxy_buffers и output_buffers.  Соответственно запрос файла в 1 
гигабайт при использовании слайсов в 1 мегабайт размером требует 
1024 подзапросов, каждый - со своими буферами.  В предположении 
буферов по умолчанию это

    (2 * 32k + 8 * 4k) * 1024 == 96m

Т.е. даже с минимальными буферами по умолчанию на один запрос 
потребуется почти 100 мегабайт памяти.  Именно поэтому 
рекомендуется делать слайсы достаточно большого размера.

Кроме того, стоит подумать про использование sendfile, это 
позволит не использовать output_buffers и существенно сэкономит 
память при отдаче ответов из кеша.

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



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