Nginx: 十分なスペースがあるにもかかわらず、「キャッシュ キー ゾーンにメモリがありません」

Nginx: 十分なスペースがあるにもかかわらず、「キャッシュ キー ゾーンにメモリがありません」

nginx ログに次のエラーが繰り返し表示されます:

[crit] 30165#0: ngx_slab_alloc() failed: no memory in cache keys zone "api-data-cache"

キャッシュキーゾーンに使用されているディレクトリを見ると、326MBマーク:

du -s /usr/local/nginx/cache/
326652

しかし私のnginx.confmax_sizeでは1GBなので、十分な余裕があるはずです。

proxy_cache_path        /usr/local/nginx/cache levels=1:2 keys_zone=api-data-cache:8m max_size=1g inactive=600m;
proxy_cache_key         "$scheme$host$request_uri/$device_type$cookie_w3tc_referrer";
proxy_cache_use_stale   updating timeout http_500 http_502 http_503 http_504;
proxy_ignore_headers    X-Accel-Expires Expires Cache-Control;

一体何が起こっているのでしょうか?ディスク容量は十分あり(空き容量50GB以上)、ドキュメンテーション、ちょっと困ってます。

答え1

必要がある共有メモリのサイズを増やすkeys_zoneの代わりに をオンにしますmax_size

回答を盗むこのスレッド

keys_zone=api-data-cache:8m最大サイズが 8 MB の共有メモリ ゾーンを定義していましたapi-data-cache。これは、キャッシュのすべてのアクティブなキーとメタデータを保持します。したがって、nginx は、ページがキャッシュされているかどうかを確認するたびに、まず共有メモリ ゾーンを参照し、キャッシュが存在する場合は実際のキャッシュの場所を探します/usr/local/cache/nginx

から公式文書と書いてある1メガバイトのゾーンには約8000個のキーを保存できますしたがって、アプリケーションに応じて、必要に応じて増やす必要があります。

関連情報