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