我遇到了我們的ASP.NET應用程序的問題,偶爾夜間回收的情況下w3wp掛起。w3wp偶爾掛在每晚的回收
這是發生了什麼:
回收被觸發。顯然這會在所有正在運行的線程上強制ThreadAbortException。但是,它似乎沒有觸發新的w3wp,或者它是實際引發異常的新w3wp(尚未能夠重現它)。
在我的日誌我得到了很多ThreadAbortException的,線程數只上升,一直運行下去,這意味着任何新的請求產生一個新的線程,永遠不會結束。如果這將是舊的w3wp,則任何新的請求都將被路由到新啓動的w3wp。
關閉超時和快速失敗保護似乎也不會觸發,只有在手動回收之前,saite纔可用。大多數情況下,它也會佔用大量CPU,使服務器幾乎無法使用。
我們正在使用Monorail MVC,它可能與它沒有任何關係,但是我們確實使用它們的RescueController系統。如果我們無意中在我們的錯誤處理中捕獲了ThreadAbortException,是否可能導致無限循環,導致w3wp掛起太嚴重以致於IIS無法從其中恢復?
可能要確保記錄所有的回收事件。從powershell:'set-webconfigurationproperty /system.applicationHost/applicationPools/applicationPoolDefaults/recycling -name:logEventOnRecycle -value:'Time,Requests,Schedule,Memory,IsapiUnhealthy,OnDemand,ConfigChange,PrivateMemory'' –