我反复在我的nginx日志中看到这个错误:
[crit] 30165#0: ngx_slab_alloc() failed: no memory in cache keys zone "api-data-cache"
看看用于caching关键区域的目录,我可以看到它在326MB标记附近徘徊:
du -s /usr/local/nginx/cache/ 326652
然而,我的nginx.conf指定1GB的max_size ,这意味着应该有足够的空间:
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的免费),并没有find任何相关的文件 ,我有点损失。
您需要增加 keys_zone 的共享内存大小,而不是max_size 。
从这个线程窃取答案
keys_zone = api-data-cache:8m是定义名为
api-data-cache共享内存区域,最大大小为8MB。 它包含caching的所有活动密钥和元数据。 所以,每当nginx检查页面是否被caching时,它首先查询共享内存区域,如果caching存在,则在/usr/local/cache/nginx查找实际caching的位置。
从官方文档来看, 一个兆字节的区域可以存储大约8千个密钥 。 所以,根据您的应用程序,您需要根据需要增加它。