nginx の LRU キャッシュ消去ポリシーは再起動後も持続しますか?

nginx の LRU キャッシュ消去ポリシーは再起動後も持続しますか?

ドキュメントにはこう書いてある。

max はキャッシュ内の要素の最大数を設定します。キャッシュがオーバーフローすると、最近使用されていない (LRU) 要素が削除されます。

nginx またはサーバーの再起動後も持続しますか?

これはどのように追跡されるのでしょうか? メモリ内ですか? それとも、ファイル システムの最終アクセス タイムスタンプを使用しているのでしょうか?

それに関する情報は見つかりません。

LRU ファイルが判別できない場合 (再起動のため) の情報はどうなりますか?

編集:

私は nginx キャッシュ ローダー プロセスを認識しています。そのプロセスがなければ、キャッシュ ファイルはまったく永続化されません。

ドキュメントによると、この読み込みプロセスにはメタデータも含まれますが、メタデータが何であるかについてはより具体的には説明されていません。

問題は、このメタデータには最終アクセスのタイムスタンプも含まれるかどうかです。

ただし、それを収容するには、まずそれを書き込む必要があります。

ファイルに inotifywait を設定し、それを要求しました。キャッシュ ファイルへの HTTP 要求の結果は次のようになります。

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

ファイルの変更は発生していないように見えるため、LRU データはディスクに書き込まれず、したがって永続的ではないという予備的な結論に至ります。

ただし、データは他の場所に書き込まれる可能性があります。また、後で別のプロセスによって RAM からディスク (キャッシュ ファイル) に書き込まれる可能性もあります。したがって、データは永続的ですが、ディスク上で最新であることが保証されるわけではありません。

それでも、この疑問は未だに解決されていない。

答え1

nginx は、ファイルのアクセス時間を使用して、LRU の対象を示すようです。ディスクの使用状況により、他のサーバーよりも小さいキャッシュでパーティション分割されているサーバー群の atime を検査すると、キャッシュが小さく、LRU 圧力が高いサーバーには、atime (find の -amin) で測定された特定の期間を超えるファイルがないようです。これを確認するのに使用したコマンドは次のとおりです。

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

そして、私たちのサーバーの 1 つからの出力は次のようになります。

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

これが正しければ、キャッシュ ローダーは再起動時にファイルの atime を読み取り、必要に応じて LRU ファイルを正しく削除する可能性があります。

答え2

このドキュメントhttp://czerasz.com/2015/03/30/nginx-caching-tutorial/「キャッシュ ローダー」と呼ばれるプロセスがあることを説明します。これは (起動時に) 1 回だけ実行され、メタデータをメモリ ゾーンにロードします。すべてのキーがロードされるまで、繰り返し実行されます。

関連情報