nginx cache manager process не соблюдает max_size размера кеша

Yury Lyakh yorick на ya.ru
Чт Май 11 12:53:45 UTC 2017


День добрый,

Возможно кто-то сталкивался с подобной ситуацией и подскажет что я пропустил...

Разбираясь с мониторингом вокруг nginx, столкнулись с тем что manager процесс, который должен вычищать кеши до размера max_size, не делает этого. Не соблюдает строго max_size размер.

CentOS 7, ext4, ssd, nginx-1.11.7 (раннее 1.11.4). Система не нагружена никак, диск ssd отдыхает, CPU около 80% *IDLE*, идет поток мелких запросов суммарно до 300-400 мбайт/сек.

Описание кеша следующее:
proxy_cache_path /var/lib/nginx/cache/cdn-example-com levels=2:2 keys_zone=cdn-example-com:50m inactive=8h max_size=100g manager_files=10000;

[root на dc227 ~]# du -sh -L /var/lib/nginx/cache/cdn-example-com/
142G	/var/lib/nginx/cache/cdn-example-com/
[root на dc227 ~]# find /var/lib/nginx/cache/cdn-example-com/*/ -type f | wc -l
145553

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

Стрейсом по manager процессу, видно что он неторопливо делает unlink, очень неторопливо и от цифры в manager_files это никак не меняется.

Изначально, пытаясь решить эту ситуацию, грешили на то что manager_files по умолчанию =100, но, и 1000, и 10000 никак не влияют на скорость.
Что приходит в голову, видимо manager процесс вычищает ровно столько сколько необходимо и все прекрасно успевает при любых значениях manager_files. Просто остальные файлы, по каким-то причинам, он считает недостойными очистки во имя сохранение max_size кеша.

Какие-то параметры в описании proxy_cache_path имеют приоритет на max_size при принятии решения чистить файл или нет?


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