Hosting

Windows Server - “沒有足夠的可用儲存空間錯誤”

  • September 9, 2019

我們有兩台 IIS 7 伺服器在網路花園中執行。每台伺服器上都有每個站點的副本。使用 DFS 同步文件(僅源文件)。圖像和大文件使用共享位於不同的伺服器上。

每周至少有幾次,我們"Not enough storage available"在讀取任何文件或處理伺服器程式碼時都會出錯。IIS 伺服器無法將路徑映射到本地磁碟(不僅僅是與 DFS 同步的磁碟),載入組策略權限似乎也有問題(我們遇到各種錯誤)並且我們無法在任何伺服器上打開任何共享在區域網路上。從其他自定義應用程序讀取文件時也會出現 I/O 錯誤。在此失敗期間的磁碟速度和延遲都還可以。如果我們嘗試複製文件或測試驅動器速度,通常可以。有時,我們甚至無法執行“我的電腦”或任何其他軟體(例如性能監視器)。只有當我們“以管理員身份執行”時它才能啟動。每個磁碟上都有足夠的可用儲存空間。

大多數網站停止工作(但不是全部)。伺服器重新啟動後,幾天一切正常,然後問題再次出現。

伺服器使用 VMWARE 進行虛擬化,每台伺服器上有 50 個 IIS 池(一些受記憶體限制)和大約 200 個執行站點。兩台伺服器都有 16GB 的 RAM(僅使用了大約 80%)。CPU 始終在 30 - 60% 之間。

我們嘗試將 IRPStackSize 系統資料庫屬性更改為更高的數字,但沒有任何更改。問題依然存在。我們嘗試禁用防病毒 (NOD) - 沒有成功。

有什麼提示嗎?也許我們接近 IIS 限制(對於許多站點/池)?也許是 32 位作業系統和 16GB 記憶體?也許有一些“秘密”的系統資料庫設置……我們不認為每天重啟是長期的解決方案。

Not enough storage available錯誤與磁碟儲存無關。這是關於內部記憶的。

這個錯誤很容易重現。只需選擇一堆大文件(圖像或 DLL 或其他),右鍵點擊並使用 open-with 選項用記事本打開它們。這應該會耗盡記憶體。當交換文件接近其最大容量時,隨機服務將開始記錄Not enough storage available到事件日誌。通常它們會一直處於故障狀態,直到重新啟動。

我在自己的服務中遇到了這個問題,並且必須添加一些額外的錯誤處理來強制服務程序線上程上發生此類錯誤時退出。這樣,服務將以自動方式重新啟動和恢復。

IIS 通常可以很好地處理這種情況(與普通的 Windows 服務相比)。

為了找到導致這種情況的程序(通常是記憶體洩漏),您應該使用性能監視器mmc 管理單元,並記錄正在執行的程序的記憶體使用情況(在決定記錄什麼時有選擇性,因為這些日誌文件可能會變得非常大)。另一種選擇是使用xperf,它實際上更適合調試低級驅動程序等,但在這種情況下也很有幫助。

如果事實證明是 w3wc 服務佔用了所有記憶體,您可以使用 Microsoft 全新的Application Insights(或任何其他 IIS 監控工具)之類的工具來確定哪個應用程序池、Web 應用程序或網站負責. 然後,您可以限制該特定池的記憶體使用量,或安排它優雅地回收。

IIS 通常可以以沒人會注意到的方式循環池(取決於應用程序如何處理會話,如果它是自定義建構的,則在刷新所有靜態變數時您可能會失去會話)。通常這樣的解決方法就足夠了,並且可以避免昂貴的錯誤修復(免責聲明:這不是解決問題的“我的風格”,但大多數利益相關者都喜歡這種方式)。

引用自:https://serverfault.com/questions/580209