Asp.net

如何確定 64 位伺服器上 IIS 崩潰的原因

  • March 16, 2017

我有一個使用 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 崩潰的原因?

閱讀ASP.NET 2.0 崩潰案例研究:未處理的異常

策略 #1 – 記錄異常

第一種方法,也是我可能推薦的方法,是創建一個 UnhandledExceptionHandler 來在事件日誌中記錄異常及其堆棧跟踪,如本文 http://support 所示。 microsoft.com/?id=911816 您將這樣的處理程序添加到 web.config:

<system.web>
  <httpModules>
    &lt;add type="WebMonitor.UnhandledExceptionModule, &lt;strong name&gt;"
       name="UnhandledExceptionModule"/&gt;
  &lt;/httpModules&gt;
      …
&lt;/system.web&gt;   

並且它將事件處理程序連接到目前應用程序域的 UnhandledException 事件。您實際上不需要對其進行強命名並將其添加到 GAC,但是如果您在多個應用程序中計劃它,您應該避免多次載入 dll。現在,當您下次遇到這些未處理的異常之一時,該程序仍將退出(除非您更改未處理的異常策略),但您很有可能解決問題。

引用自:https://stackoverflow.com/questions/939967