我是NGINX的新手并尝试设置缓存,虽然我能够获得缓存工作但是我遇到了内存使用问题。现在在NGINX文档中,它说NGINX可以在1MB空间内存储大约8000个缓存密钥。因此,通过配置,我运行了一个带有20K唯一请求的负载测试。我很快就看到NGINX盒子上的内存使用率飙升至70MB。现在根据文档我会想象内存使用率远低于我所看到的。此外,我确认只有在我打开缓存时内存使用量才会增加。
以下是我的NGINX配置的缓存部分:
proxy_cache_path /tmp/cache keys_zone=static:4000m max_size=10g inactive=12h;
proxy_cache static;
add_header X-Cache-Status $upstream_cache_status;
proxy_ignore_headers X-Accel-Expires Expires Set-Cookie;
proxy_ignore_headers Cache-Control;
proxy_cache_min_uses 1;
proxy_cache_key '$scheme$host$uri';
proxy_cache_valid 200 12h;
有人可以帮忙吗?
提前致谢。
答案 0 :(得分:0)
这似乎是Windows上的Nginx问题。
在Linux上没有遇到这种情况,它按预期缓存每1Mb keys_zone大小的8K请求。
在Windows上,缓存行为有所不同。
请注意Nginx site上的评论:
"需要共享内存支持的缓存和其他模块 不适用于Windows Vista和更高版本.."
在没有查看来源的情况下,即使有足够的空间,我甚至无法说出具有内存共享的缓存是否在Windows上正常工作。
从我的测试开始,直到你达到下面的文件计数限制,它按预期从缓存服务。对于Windows上的区域中的每个密钥分配,它可能需要4K(页面大小)。
我测试了25K请求,缓存中保留的最大文件数与keys_zone大小成正比,如下所示:
1m <= 253 files
2m <= 508 files
3m <= 761
5m <= 1274
10m <= 2548
20m <= 5103
40m <= ~8K
80m <= ~20K
(数字表示1.9.3,1.11.6暴露了类似行为,但数字略有不同)。
这与您的记忆增长观察结果一致。一旦达到每个keys_zone大小的文件计数限制,如上所述,它将奇怪地错过。
在Ubuntu上,Nginx 1.4和1.10会根据限制创建预期数量的缓存文件;正如预期的那样,25K缓存请求的进程内存不会超过每8k请求大约1Mb。