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個のキーを保存できますしたがって、アプリケーションに応じて、必要に応じて増やす必要があります。