我有一个使用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崩溃的原因?
答案 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内存转储和分析。