Nginx内容缓存导致Docker内存峰值

我正在尝试使用Docker中的Nginx设置代理内容缓存,但是我的容器遇到了内存问题.实际的Nginx实现工作正常(页面被缓存并按预期提供),但是一旦页面开始被缓存,我的容器内存(用“docker stats”测量)就会非常快速地攀升.

根据Nginx文档(https://www.nginx.com/blog/nginx-caching-guide/),我预计每8,000页缓存大约增加1MB,但增长幅度要大得多 – 大约每8000页大约40MB.另外,当我的容器中运行“top”时,nginx进程内存看起来很正常 – 几MB – 而我的容器内存暴涨.

它似乎很喜欢缓存的页面本身,它们存储在一个特定的目录中,占用了内存?这不应该是这种情况,因为只有缓存键应该在内存中.我想我已经测试了大约25,000个页面被缓存 – 容器内存永远不会下降.另外,如果我只是在关闭缓存的情况下代理请求,则没有容器内存峰值.

我正在运行一个非常基本的nginx配置设置 – 几乎在Nginx docs链接中有详细说明.

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g
             inactive=60m use_temp_path=off;
server {
    ...
    location / {
        proxy_cache my_cache;
        proxy_pass http://my_upstream;
    }
}

Docker图像测试 – 官方nginx图像,alpine:3.4安装了nginx,centos:7安装了nginx

测试Docker版本:Docker for Mac 1.12.1,Docker 1.11.2(在Kubernetes上)

Grafana dashboard showing memory growth

最佳答案 哇,我做了几乎相同(检查码头统计数据,然后使用graphana与cadvisor和InfluxDB绘制增加)与我的应用程序(不是nginx).我同意你的结论,页面缓存有助于增加内存.

在深入研究该容器的cgroups指标后,我解决了自己的问题:
https://stackoverflow.com/a/41687155/6919159

如果你按照我的回答中的描述设置容器内存使用量的限制,你应该看到容器回收内存.希望它有所帮助,虽然已经2个月了!

点赞