如何在拋出 OutOfMemoryException 時使 ASP.NET 應用程式回收

如何在拋出 OutOfMemoryException 時使 ASP.NET 應用程式回收

我有一個在Server 2019 上的IIS 中運行的ASP.NET 應用程式(.NET Framework 4.8)。 。 ASP.NET 執行時期無法在記憶體中找到如此大的區塊並拋出 OutOfMemoryException。網站繼續運行,但有些頁面可以運行,有些則不能。 IIS 應用程式集區運作狀況看起來好像一切正​​常,但實際上,在我手動回收池之前,大部分網站都無法運作。

當私有位元組超過幾 GB 時,應用程式集區已經設置了回收設置,但當站點不工作時查看 w3wp 進程時,它只使用了幾百 MB。有什麼方法可以讓 ASP.NET 或 IIS 在拋出此例外狀況時進行回收嗎?

答案1

這需要從 IIS 和您的應用程式外部進行監視和處理。應用程式事件日誌中可能存在異常,計劃任務可以用作觸發器來從命令列停止/啟動應用程式集區。

這似乎也是一個相當基本的垃圾收集設​​定。至少,所有應用程式都應配置為伺服器 GC。

此外,可能可以添加一些程式碼來促進正確的健康檢查。多年來,使用強制使用 .NET Framework 的頁面進行負載平衡器運行狀況檢查一直是標準流程。如果應用程式集區因記憶體不足異常而崩潰,則該運行狀況檢查必定會失敗。

相關內容