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.conf 指定max_size1GB,所以應該有足夠的空間:

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.

竊取答案這個線程

key_zone=api-data-cache:8m正在定義api-data-cache最大大小為 8 MB 的共享記憶體區域。它保存快取的所有活動金鑰和元資料。因此,每當 nginx 檢查頁面是否已快取時,它都會先查詢共享記憶體區域,然後在快取/usr/local/cache/nginx存在的情況下尋找實際快取的位置。

官方文檔, 它說1兆位元組區域可儲存約8000個密鑰。因此,根據您的應用程序,您需要根據需要增加它。

相關內容