Re: Отъедает память и начинает тормозить. Помогите найти причину.

Maxim Dounin mdounin на mdounin.ru
Сб Апр 25 15:58:47 UTC 2020


Hello!

On Fri, Apr 24, 2020 at 04:15:13AM -0400, Dmytro Lavryk wrote:

> Доброго всем здоровья, в сложившейся обстановке.
> 
> Есть nginx c "замороченным конфигом". Используется для проксирования раздачи
> видео по секьюрити ссылкам. Уонфиг такой достался, лично мне не везде
> понятен. потому... Суть ситуации - потребление памяти процессами nginx все
> время растет.. при достижении какого-то пикового значения (~1,2Гб на процесс
> /их 16-ть получается/) сильно падает скорость отдачи. при этом свободная
> память в ситеме все еще есть. Хотелось бы понять 2 момента:
> 1. Почему происходит потеря продуктивности?
> 2. Почему потребление памяти все время растет, а не ограничивается на
> каком-то уровне?

В конфиге три кэша, у каждого из них - гигабайт на ключи в 
разделяемой памяти.  Из общих соображений можно предположить, что

>   vod_metadata_cache metadata_cache 4096m 30m;
>   vod_response_cache response_cache 256m 30m;

в конфиге означает ещё до 4 с лишним гигабайт разделяемой памяти.

То есть банальный запуск nginx'а с такой конфигурацией потребует 
более 7 гигабайт памяти.

И при этом, судя по всему, минимум 512 килобайт буферов будет 
расходоваться на соединение ("vod_cache_buffer_size 512k;"), то 
есть до 4 гигабайт на процесс (512k * 8192).  А скорее всего и 
больше, сколько требует тот же brotli - надо разбираться.

То есть цифры по памяти выглядят вполне адекватными конфигурации, 
даже если предположить, что в используемых сторонних модулях 
никаких проблем нет.

Что до потери скорости отдачи - то тут надо разбираться в причинах 
по месту, смотреть, во что именно упираемся.  Типичные причины: 
упёрлись в диск, кончилась память (даже если она "в системе всё 
ещё есть" - уменьшение количества свободной памяти в системе 
означает ухудшение эффективности кэширования файлов операционной 
системой, и соответственно рост нагрузки на диск), кончилась сеть, 
кончился процессор.

Я бы рекомендовал начать с простого: разобраться, во что именно 
упираемся.  А дальше уже разбираться, почему.

Из совсем простого - выкиньте из конфига open_file_cache, толку от 
него с вероятностью 99.99% нет вообще никакого, а проблем огрести 
можно легко и непринуждённо, особенно при тех настройках что у 
вас: с 512 тысячами открытых файлов на каждый процесс банально OS 
может не справиться без специального тюнинга.

-- 
Maxim Dounin
http://mdounin.ru/


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