cache_manager process waits 1 day to start working

Maxim Dounin mdounin на mdounin.ru
Вс Мар 25 17:38:52 UTC 2018


Hello!

On Fri, Mar 23, 2018 at 04:15:51PM +0200, Serhii Kharchenko wrote:

> Доброго дня,
> 
> Столкнулся с ситуацией, когда процесс "nginx: cache manager process"
> начинает что-то делать только через сутки после рестарта nginx'а.
> Целые сутки он потребляет очень мало RAM (чуть больше 3500kB), в strace по
> кругу следующее:
> --- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
> rt_sigreturn()                          = -1 EINTR (Interrupted system call)
> epoll_wait(7, 55b5d0d6bdc0, 512, -1)    = -1 EINTR (Interrupted system call)
> --- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
> rt_sigreturn()                          = -1 EINTR (Interrupted system call)
> epoll_wait(7, 55b5d0d6bdc0, 512, -1)    = -1 EINTR (Interrupted system call)
> 
> Само собой, кеши за сутки распухают, никто не чистит устаревшие файлы.
> 
> Через 24 часа (с небольшими копейками, минута-две) процесс начинает
> потреблять оперативку и довольно шустро вычищает старые файлы из кешей. И
> до следующего рестарта все ОК.
> 
> Процесс "nginx: cache loader process" после рестарта аналогично ждет
> минуту, потом работает несколько минут и завершается.

Отмечу, что пауза в минуту перед началом работы cache loader'а, 
равно как и его завершения после загрузки кэшей - это нормально, 
так и должно быть.

> Директив proxy_cache_path на весь nginx несколько, с разным параметром
> inactive, есть даже с inactive=600.
> 
> nginx-1.12.2, nginx-1.13.10 - подвержены "проблеме".
> 
> Ни в документации, ни в коде, ни в гугле ничего пока по этому поводу не
> нашел.
> Просьба направить по правильному пути.

В первую очередь имеет смысл убедиться, что из кэшей с 
inactive=600 действительно не удаляются ответы, к которым не 
обращались более 600 секунд.   Потому что при перезапуске inactive 
начинает считаться от момента перезапуска, и кэши с очисткой по 
inactive будут ожидаемо расти до достижения времени inactive.  Так 
что если у большей части кэшей inactive=1d, то будет наблюдаться 
как раз похожая на описанное картина.

Если действительно установленное время inactive не выдерживается, 
то имеет смысл включить debug и посмотреть, что пишет cache 
manager.  Кроме того:

- если вдруг используются сторонние модули - стоит проверить без 
  них;

- басудя по strace - используется timer_resolution.  Опять же, 
  стоит проверить без.

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


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