我們有一個新的ASP.NET網站在一對負載平衡的Azure虛擬機上運行。該網站非常簡單,並使用Kentico CMS。自上線後24小時內兩次,兩臺Web服務器上的應用程序池突然停止(相距5-10分鐘),導致出現503: Service unavailable
錯誤。IIS應用程序池在Azure負載平衡虛擬機上崩潰
瞭解Windows系統日誌我看到這導致問題的錯誤:
應用程序池「[NAME]」被自動由於在這個過程中 一系列的失敗(ES)禁用提供該應用程序池。
領導到這是一系列的警告:
服務應用程序池的處理「[[NAME]遇到致命的 通信錯誤與Windows進程激活服務。進程ID爲 爲'[[PROCESS ID]]'。數據字段包含錯誤號碼 。
顯然,這是IIS在踢快速失敗保護。什麼是不明確的是如何找到這個「致命通信錯誤」的原因。
經過一些網絡搜索後,我已經安裝了調試診斷工具,它幫助我識別出在任何情況下相關進程都是IIS工作進程(w3wp.exe)。這個工具對我來說是新的,但不幸的是,自從我安裝它以來發生問題的唯一時間,沒有生成垃圾箱。然而,它的日誌中含有大量的消息是這樣的:
第一次機會異常 - 0xe0434352造成線程系統ID: [ID]
令人沮喪的事情是,我不不知道要採取哪些步驟來複制錯誤條件。即使在負載測試下,它也不會出現在非常相似的環境中。以下是關於我的設置的一些事實:
- ASP.NET版本=與身份設置爲域帳戶上的網站目錄
- 應用設置,最大一個修改權限運行4.5.2
- 應用程序池工作進程
任何意見非常讚賞。
*更新1 *
我現在有DebugDiag資料轉儲由 「致命的通信錯誤」 警告事件發生。轉儲總結如下:
Dump Summary
------------
Process Name: w3wp.exe : C:\Windows\SysWOW64\inetsrv\w3wp.exe
Process Architecture: x86
Exception Code: 0xC00000FD
Exception Information: The thread used up its stack.
Heap Information: Present
如果有任何記錄錯誤,您可以檢查Kentico事件日誌嗎? –
Kentico的事件日誌中唯一的錯誤是由自定義Web部件中的Response.Redirect導致的「線程被中止」異常。將此方法的重載的endResponse參數設置爲false會停止它拋出異常。上述主要錯誤並沒有重新發生,因爲這是固定的,但「致命的通信錯誤」警告已經提出了幾次,所以我認爲這不是原因。 – getsetcode