[廚餘回收] Redis 裝在 GCE Windows Server 上須注意一下虛擬記憶體的設定

某個週末公司某個裝在 Windows Server 上的 Redis 服務掛點,從 Server Log 看到下面這段錯誤:

# Write error saving DB on disk: Invalid argument
# rdbSave failed in qfork: Invalid argument
# fork operation complete
# Background saving error

是在 Redis 做 Snapshot 的時候沒有成功,進而影響到服務的運作,Snapshot 會失敗大概會有幾個原因:

  1. 記憶體不足
  2. 磁碟空間不足
  3. 權限不足

現在我們就來看看是哪一個原因?

翻找伺服器的日誌在與 Redis Server Log 拋出錯誤相同的時間點發現一個事件 Windows successfully diagnosed a low virtual memory condition.,Windows 逮到了一個低虛擬記憶體的情況。 不是吧!?

打開虛擬記憶體的設定畫面發現 Paging File Size 才給 1GB

調整設定讓作業系統自己管理虛擬記憶體後,問題不再發生。

後來去 GCE 上看,每台 Windows Server 都是這個設定值,比對我自行在實體機器上安裝的 Windows Server 預設虛擬記憶體的設定,就都是交由作業系統自己去管理。

不過這也讓我產生了兩個問題,只能留待之後再查明了:

  1. Redis + Windows Server 的組合中,實體記憶體與虛擬記憶體是怎麼搭配使用的?
  2. Windows Server 設定的虛擬記憶體只有 1GB,為何會等到應用程式使用超過那麼多才拋出事件?

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學