Re: nginx перестает следить за размером каталога proxy_cache_patch
Maxim Dounin
mdounin на mdounin.ru
Вт Май 2 12:17:01 UTC 2017
Hello!
On Fri, Apr 28, 2017 at 12:22:20PM +0700, Владислав Толмачев wrote:
> иногда, в не зависимости от нагрузки, nginx перестает следить за размером
> каталога proxy_cache_patch и каталог начинает выходить за пределы
> установленного размера и забивает полностью диск. Каталог находится на
> raid0 из 12 ssd по 240G, там около 2.5М файлов кэша hls видео
>
> proxy_cache_path /var/www/nginx/nginx_proxy_cache levels=1:2
> keys_zone=two:1536m inactive=1y max_size=2350G loader_files=1000
> loader_sleep=10ms loader_threshold=8000ms manager_files=500
> manager_threshold=1000ms manager_sleep=50ms use_temp_path=off;
>
> не помогает kill процесс nginx cache manager, только полный рестарт nginx,
> после чего он очищает забитый диск/папку до установленного лимита.
>
> Что сделать, что бы он не переставал следить за размером кэша? поймать
> дебаг трудно так как это может произойти только раз в месяц, а может и
> через 2 дня никакой зависимости не выявлено. Стандартные параметры
> manager_file или те, которые я установил не дают эффекта, все равно в один
> прекрасный момент диск забивается полностью.
Кеш перестаёт чистится по max_size, если 20 самых старых элементов
в кеше - кем-то заблокированы и не могут быть удалены (при очистке
по inactive такие элементы приводят к alert'ам "ignore long locked
inactive cache entry"). Появиться такие элементы могут из-за
естественных причин - например, какой-то запрос с ними на самом
деле очень долго получает ответ от бекенда. Однако на практике
чаще всего причина наблюдаемых проблем - падение рабочего
процесса, и соответственно оставшиеся от него блокировки.
Так что начать стоит с простого - проверить логи на предмет
падений рабочих процессов, если они есть - найти и устранить
причину падений.
Отмечу также, что к аналогичным падению результатам (неочищенные
блокировки, и соответственно "сломавшаяся" очистка по max_size,
alert'ы "long locked inactive cache entry" при очистке по
inactive) может привести и некорректное управление рабочими
процессами, в частности - использование SIGTERM (не говоря уже про
SIGKILL) для быстрого завершения старых рабочих процессов.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru