【问题标题】:Nginx not deleting files cached on RAMNginx 不删除缓存在 RAM 上的文件
【发布时间】:2016-12-22 11:18:32
【问题描述】:

我正在运行 Nginx 服务器来为用户提供视频内容。这个 nginx 服务器从上游服务器中挑选内容,缓存它,也为用户服务。所有未来的请求都从此缓存中提供。我为此预留了 500GB 的缓存空间。当缓存已满时,如果缓存文件夹在硬盘上,nginx 缓存管理器可以根据我的 proxy_cache 指令删除旧的、未使用的文件。当我将此缓存文件夹挂载到 RAM (tmpfs) 上时,nginx 无法删除旧文件。我收到一条错误消息,提示“28:设备上没有剩余空间”。我在 RAM 和硬盘上都检查了缓存文件夹的权限。它具有相同的权限。

proxy_cache_path    /cache/12054 keys_zone=a12054:100m levels=1:2 max_size=500g inactive=7d;

如果我从 RAM 中卸载它,它会再次开始正常工作。

【问题讨论】:

  • 挂载到 tmpfs 后,7 天没有内容完成。但是我的 500 GB 存储空间已满。所以我希望最早的内容被删除,新文件使用那个空间。

标签: caching nginx tmpfs


【解决方案1】:

你的内存太少了。您需要 500 GB 的虚拟 RAM(物理 RAM + 交换空间)才能使该配置在 tmpfs 中工作。 Nginx 不会尝试清除文件,直到它们过期或您已达到max_size。来自manual

特殊的“缓存管理器”进程监控由max_size 参数设置的最大缓存大小。当超过这个大小时,它会删除最近最少使用的数据。

通过运行df -h 确认您的 tmpfs 分区有多大。

您可能根本不需要 tmpfs。如果您运行的是现代操作系统,则所有空闲 RAM 都应自动用作磁盘缓存。只需将文件写入磁盘。无论如何,它们迟早都必须被写入,因此直接编写它们而不是等待它们被换出可能更有效。

【讨论】:

  • 我为此目录预留了 500 GB 的 RAM。我的 df -f 输出:'tmpfs 500G 500G 0 100% /cache/12054' 我的 tmpfs 已达到 max_size。一旦我达到 max_size,nginx 就无法从 tmpfs 中删除最少使用的内容,这些内容尚未达到 inactive 和 proxy_cache_valid。 nginx 删除已经越过 inactive 和 proxy_cache_valid 的文件。
  • 另外,我在磁盘上没有那么多内存,但在 RAM 上有足够的空间。
  • 如果将 Nginx max_size 缩小到 450 GB 会怎样?
  • 成功了。我将 tmpfs 的挂载大小增加到大于我的 max_size。现在 nginx 能够在需要时清除文件。对于我应该在 tmpfs 上提供多少额外空间,是否有任何经验法则?万分感谢。拯救了我的一天。
猜你喜欢
  • 1970-01-01
  • 2016-03-09
  • 2020-09-10
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多