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

窃取答案此主题

keys_zone = api-数据缓存:8m正在定义名为api-data-cache最大大小为 8 MB 的共享内存区域。它保存缓存的所有活动键和元数据。因此,每当 nginx 检查页面是否被缓存时,它都会首先查阅共享内存区域,然后/usr/local/cache/nginx如果缓存存在,则寻找实际缓存的位置。

官方文档, 它说一兆字节区域可以存储大约 8 千个密钥。因此,您需要根据您的应用程序根据需要增加它。

相关内容