2009-01-21 115 views
12

也許有人可以在這個簡單的問題上談一談:爲什麼即使回收應用程序池?

我有一個.NET Web應用程序已經徹底審查。無論何時啓動,它都會爲每個appdomain(進程)加載緩存,並且無法完全回覆請求,直到完成此緩存加載。

我一直在檢查我的應用程序池的設置,並開始想知道爲什麼我甚至經常回收(每1,000,000次呼叫或2個小時)。

什麼會阻止我將自動回收設置爲每24小時甚至更長一次?爲什麼不完全刪除該選項,並只是回收,如果內存失去對appdomain的控制?

回答

4

他們這樣做的原因是,即使應用程序的CPU和內存都很好(認爲死鎖),應用程序仍然可能「無法正常工作」。應用程序回收是最終的故障安全措施,可以保護有缺陷的代碼免於死亡。

此外,任何未能實現IDisposable的代碼都會在回收站上運行終結器,從而可能釋放持有的資源。

6

您應該從可靠性的角度來看待回收利用。根據歷史數據,您應該知道應用程序使用了多少內存,CPU等等,以及歷史模式和何時發生故障。知道這一點,您可以配置回收來對付這些問題。例如,如果您知道您的應用程序的內存使用模式日益增加,並導致應用程序在幾天後耗盡內存,則可以在應用程序發生之前將其配置爲回收。

*很明顯,你也想,如果能夠解決這個bug,但如果您的應用程序可靠地運行更長的時間,然後再利用可以用來提高可靠性爲客戶

8

門檻,應用程序池回收設置,那麼通過一切手段提高門檻。如果您的應用程序穩定,則沒有任何不利之處。

對於我們來說,我們已經完全關閉了回收站,而是每分鐘都有一個任務加載測試頁,並且如果它無法連續加載五次,則會運行iisreset。

相關問題