如何确定64位服务器

问题描述:

我有一个Windows Server 2003标准的x64上运行的.NET 2.0的Web应用程序上的IIS崩溃的原因,使用IIS 6如何确定64位服务器

的应用程序池,我们网站最近开始崩溃,我无法确定原因。它开始发生在一个周末,最新版本的网站是在几天前。我确定最近没有对服务器进行任何其他更改,包括代码和Microsoft更新。

事件日志显示以下每当碰撞与数据块中没有附加信息发生:

错误的应用程序程序w3wp.exe,版本 6.0.3790.3959,邮票45d691cc,错误模块kernel,版本 5.2.3790.4062,邮票462643a7,调试? 0,故障地址0x0000000000027d8d。

这是在x64服务器上运行的,所以我不能使用任何标准的调试诊断工具,因为即使它有一个64位版本,它也只能附加到以32位模式运行的IIS。

我已经尝试使用Windows调试工具(x64),并能够附加到w3wp进程,并等待另一次崩溃。但是,这会让服务器变慢以至于无法使用,所以我不得不阻止它。

可以使用其他方法来尝试确定IIS崩溃的原因吗?

阅读关于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被加载 。现在下一次 你得到这些未处理的 例外之一,该过程仍然会退出 (除非你更改未处理的 例外策略),但你有很好的解决问题的机会。

+0

好的发现,我现在试着这个。 – AaronS 2009-06-02 16:33:16

+0

@AaronS,它是如何为你工作的? – jinsungy 2009-06-03 18:15:49

+0

本文不直接为我工作,但是是正确的答案。由于这影响了生产系统,我打开了与微软的支持凭单。他们首先向我指出了这篇文章,然后向我提供了一个调试工具来帮助查找实际问题。问题是无穷的递归循环,因为数据嵌套不好。 – AaronS 2009-06-17 22:10:04

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

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

如果问题是应用程序代码,如未处理的异常(但如果这是你的问题,我希望看到在Windows事件详情日志),您可以使用工具来捕获并报告它们。 ELMAH是我过去为此使用的一个很棒的工具。它被描述为Tivo for web applications,并有多种方式来传递异常的细节,并帮助追踪出现了什么问题。

微软的Debug Diagnostic Tool (DebugDiag)将做的伎俩。它将提供一个IIS内存转储和分析。