【问题标题】:NGINX memory spiking when caching缓存时 NGINX 内存峰值
【发布时间】:2016-11-23 17:27:56
【问题描述】:

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

有人可以帮忙吗?

提前致谢。

【问题讨论】:

    标签: caching memory nginx


    【解决方案1】:

    这似乎是 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 2016-02-22
      相关资源
      最近更新 更多