如何確定 64 位伺服器上 IIS 崩潰的原因
我有一個使用 IIS 6 在 Windows server 2003 Standard x64 上執行的 .net 2.0 Web 應用程序。
我們網站的應用程序池最近開始崩潰,我無法確定原因。它開始發生在一個週末,該網站的最新版本是幾天前發布的。我確定最近沒有對伺服器進行其他更改,包括程式碼和 Microsoft 更新。
每當發生崩潰而數據塊中沒有其他資訊時,事件日誌都會顯示以下內容:
錯誤應用程序 w3wp.exe,版本 6.0.3790.3959,標記 45d691cc,錯誤模組 kernel32.dll,版本 5.2.3790.4062,標記 462643a7,調試?0,故障地址0x0000000000027d8d。
這是在 x64 伺服器上執行的,所以我不能使用任何標準的調試診斷工具,因為即使它有 64 位版本,它也只能附加到以 32 位模式執行的 IIS。
我嘗試使用 Windows 調試工具 (x64) 並能夠附加到 w3wp 程序,並等待另一次崩潰。但是,這大大降低了伺服器的速度,以至於它無法使用,所以我不得不停止它。
我可以使用哪些其他方法來嘗試確定 IIS 崩潰的原因?
策略 #1 – 記錄異常
第一種方法,也是我可能推薦的方法,是創建一個 UnhandledExceptionHandler 來在事件日誌中記錄異常及其堆棧跟踪,如本文 http://support 所示。 microsoft.com/?id=911816 您將這樣的處理程序添加到 web.config:
<system.web> <httpModules> <add type="WebMonitor.UnhandledExceptionModule, <strong name>" name="UnhandledExceptionModule"/> </httpModules> … </system.web>並且它將事件處理程序連接到目前應用程序域的 UnhandledException 事件。您實際上不需要對其進行強命名並將其添加到 GAC,但是如果您在多個應用程序中計劃它,您應該避免多次載入 dll。現在,當您下次遇到這些未處理的異常之一時,該程序仍將退出(除非您更改未處理的異常策略),但您很有可能解決問題。