缓存时{NGIX内存加标

时间:2016-11-23 17:27:56

标签: caching memory nginx

我是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;

有人可以帮忙吗?

提前致谢。

1 个答案:

答案 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。