Сохраняется ли политика очистки кэша LRU в nginx после перезагрузок?

Сохраняется ли политика очистки кэша LRU в nginx после перезагрузок?

В документе сказано: "

max устанавливает максимальное количество элементов в кэше; при переполнении кэша удаляются элементы, которые использовались реже всего (LRU);

Сохраняется ли проблема после перезагрузки nginx или сервера?

Интересно, как это отслеживается? В памяти? Или, может быть, по последней временной метке доступа файловой системы?

Я не могу найти никакой информации по этому поводу.

Как получить информацию, если файл LRU не может быть определен (из-за перезагрузки)

Редактировать:

Я знаю о процессе загрузки кэша nginx. Если бы не этот процесс, файлы кэша вообще не были бы постоянными.

Согласно документации, этот процесс загрузки также включает метаданные, но не уточняет, что именно представляют собой метаданные.

Вопрос в том, включают ли эти метаданные также метку времени последнего доступа.

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

Я установил inotifywait на файл и запросил его. Вот что дает HTTP-запрос к файлу кэша:

cache-filename OPEN 
cache-filename ACCESS 
cache-filename CLOSE_NOWRITE,CLOSE 

Судя по всему, никаких изменений в файле не происходит, это приводит к предварительному выводу, что данные LRU не записываются на диск и, следовательно, не являются постоянными.

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

Что по-прежнему оставляет вопрос без ответа.

решение1

Похоже, что nginx может использовать время доступа к файлу, чтобы указать, что LRU. Проверка atime на множестве серверов, некоторые из которых разделены на меньшие кэши, чем другие, из-за другого использования диска, показывает, что на серверах с меньшими кэшами и большей нагрузкой LRU нет файлов старше определенного возраста, измеренного atime (-amin в find). Команда, которую я использовал, чтобы увидеть это:

for i in `seq 1000 100 4000`; do 
    echo -n "Files accessed more than $i minutes ago: "
    find /opt/nginx-cache/data -type f -amin +$i | wc -l
done

И вывод с одного из наших серверов:

Files accessed more than 1000 minutes ago: 52154
Files accessed more than 1100 minutes ago: 40582
Files accessed more than 1200 minutes ago: 25527
Files accessed more than 1300 minutes ago: 19567
Files accessed more than 1400 minutes ago: 13384
Files accessed more than 1500 minutes ago: 7683
Files accessed more than 1600 minutes ago: 4597
Files accessed more than 1700 minutes ago: 3038
Files accessed more than 1800 minutes ago: 1916
Files accessed more than 1900 minutes ago: 1251
Files accessed more than 2000 minutes ago: 837
Files accessed more than 2100 minutes ago: 585
Files accessed more than 2200 minutes ago: 459
Files accessed more than 2300 minutes ago: 365
Files accessed more than 2400 minutes ago: 258
Files accessed more than 2500 minutes ago: 101
Files accessed more than 2600 minutes ago: 8
Files accessed more than 2700 minutes ago: 0
Files accessed more than 2800 minutes ago: 0
Files accessed more than 2900 minutes ago: 0
Files accessed more than 3000 minutes ago: 0

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

решение2

Этот документhttp://czerasz.com/2015/03/30/nginx-caching-tutorial/описывает, что есть процесс, называемый "Cache loader". Он запускается только один раз (при запуске) и загружает метаданные в зону памяти. Он запускается итерациями, пока не будут загружены все ключи.

Связанный контент