2016-08-16 82 views
1

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

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

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

+0

安装在tmpfs后,没有内容已经完成7天了。但我的500 GB存储空间已满。所以我想要删除最早的内容并使用新文件来使用该空间。 –

回答

1

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

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

通过运行df -h确认tmpfs分区的大小。

您可能完全不需要tmpfs。如果你正在运行一个现代化的操作系统,那么所有可用的RAM都应该被自动用作磁盘缓存。只需将文件写入磁盘即可。无论如何,它们迟早都要写出来,所以直接编写它们可能会更有效率,而不是等待它们被换出。

+0

我为此目录预留了500 GB的RAM。我的df -f输出: 'tmpfs 500G 500G 0 100%/ cache/12054' 我已经在我的tmpfs上达到了max_size。一旦我点击了max_size,nginx就无法从尚未达到inactive和proxy_cache_valid的tmpfs中删除最少使用的内容。 nginx删除已经穿过inactive和proxy_cache_valid的文件。 –

+0

此外,我没有那么多的磁盘内存,但RAM上有足够的空间。 –

+1

如果将Nginx max_size缩小到450 GB,会发生什么情况? –