2016-08-16 80 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,會發生什麼情況? –