如何确定64位服务器上IIS崩溃的原因

时间:2009-06-02 14:43:53

标签: asp.net iis iis-6 crash crash-dumps

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

3 个答案:

答案 0 :(得分:5)

了解ASP.NET 2.0 Crash case study: Unhandled exceptions

  

策略#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   多次。现在下一次   你得到其中一个未处理的   例外情况,这个过程仍然存在   退出(除非你改变未处理的   例外政策),但你有一个   解决问题的好机会。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:3)

微软的Debug Diagnostic Tool (DebugDiag)将会解决问题。它将提供IIS内存转储和分析。