我正在尝试在 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 文档链接中详细介绍的内容。
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;
}
}
Run Code Online (Sandbox Code Playgroud)
Docker 镜像测试 - 官方 nginx 镜像,alpine:3.4 安装了 nginx,centos:7 安装了 nginx
测试的 Docker 版本:Docker for Mac 1.12.1、Docker 1.11.2(在 Kubernetes 上)