7

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

4

3 回答 3

5

阅读ASP.NET 2.0 崩溃案例研究:未处理的异常

策略#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。现在,下次您遇到这些未处理的异常之一时,该进程仍将退出(除非您更改未处理的异常策略),但您很有可能解决问题。

于 2009-06-02T15:15:25.997 回答
4

Microsoft 的调试诊断工具 (DebugDiag)可以解决问题。它将提供 IIS 内存转储和分析。

于 2010-01-04T20:36:00.137 回答
3

您可以设置性能计数器来监控 CPU、内存和 .NET 特定计数器等内容。有很多细节,但这篇 TechNet 文章可能会有所帮助:

ASP.NET 本身具有用于监视应用程序运行状况的完整命名空间。您可以创建自己的事件,或者最常见的情况是,为您的应用程序配置默认事件。这篇 MSDN 文章有更多内容:

如果问题是应用程序代码,例如未处理的异常(尽管如果这是您的问题,我希望在 Windows 事件日志中看到更多详细信息),您可以使用工具来捕获和报告它们。ELMAH是我过去为此使用的一个很好的工具。它被描述为用于 Web 应用程序的 Tivo,并且有多种方式来提供异常的详细信息并帮助追踪问题所在。

于 2009-06-02T15:18:53.010 回答