從 IIS6 升級到 IIS7 以提高應用程序性能
我有一個目前在 IIS6 中執行的 ASP Classic 應用程序,但通常由於原始程序員沒有遵循“最佳實踐”,這個應用程序會在幾個小時後引發 Out of Memory 錯誤。
最初,我參考原始問題在 StackOverflow 上提出了這個問題。
理想的解決方案是將應用程序遷移到 .NET,或者對原始程式碼進行故障排除以找到記憶體洩漏並進行補救。然而,有將近一百萬行程式碼……發現各種問題並修復它們需要時間,並且需要更多時間來發現進一步的記憶體洩漏。
我的問題是:IIS7 會比 IIS6 更好或更有效地處理 VBScript 記憶體使用,這將是一種改進嗎?將應用程序遷移到 IIS7 以幫助緩解此問題是否值得?顯然整個問題不會消失,因為仍然存在洩漏,但它會改善嗎?
該應用程序在 Windows Server 2003 上執行。
如果您遷移到 x64,它將執行更長時間。它可以在爆炸之前使用盡可能多的記憶體。在 x86 中,您可能甚至不會達到 2 GB 的程序限制,然後才會崩潰。然後,您可以減少回收應用程序池的頻率,並希望在影響較少使用者的數小時後回收。
但它是否“更好或更有效地處理 VBScript”?沒有。
遷移可能比它的價值更麻煩。IIS 6 具有與 7 基本相同的回收選項,這可能是我在您的情況下首先要考慮的。
如果它實際上是洩漏記憶體,您可以實現基於記憶體限制的回收。
例如:如果應用最終彈出 800MB 私有字節,它會被回收。(回收創建一個新程序來替換舊程序,然後終止舊程序)。
如果您的應用程序對回收的響應沒有很差(回收會導致狀態失去 - 例如會話狀態、記憶體中的變數等),那麼這可能是一個不錯的選擇。如果它是無狀態的,您還可以查看設置 maxprocesses > 1(“網路花園”),理論上這會將失敗前的時間乘以工作程序的數量。(這假設你有 n * 2GB RAM 可以扔給它)
如果是這樣,並且您的應用程序具有定義的生命週期,則實施比這更短的回收間隔(例如,每 1 小時回收一次)。