ASP.NET工作进程经常崩溃

我们有一个Web应用程序,运行在Windows Server 2003上,运行ASP.NET 2.0.50727。 该应用程序一直运行良好,直到上周。 本周以来,我们一直在定期收到下面的错误,导致工作进程的回收。

错误应用程序w3wp.exe,版本6.0.3790.3959,错误模块ntdll.dll,版本5.2.3790.3959,错误地址0x0001a3e1。

我们已经尝试重新安装.NET框架以及IIS6,没有运气。 相同的Web应用程序在不同的Windows Server 2003机器上工作正常。

我们的操作系统是Windows Server 2003 SP2。 最近1-2周没有更新。 令人惊讶的是,上周四一切都很顺利,本周事情进展顺利。

不幸的是,IIS错误信息不是非常具有描述性。 我会build议安装IIS运行和监视IIS的东西,并在崩溃时logging详细的崩溃信息,以便您可以诊断问题。

在系统日志中应该有另外一个这样的消息,会给你一个错误代码:

服务应用程序池“MyAppPool”的进程意外终止。 进程ID是'3416'。 进程退出代码是'0xc0000005'。

您可以使用Microsoft Exchange错误查找工具查找错误代码(进程退出代码)。 我知道这个问题不是关于Exchange,但是这个工具很适合从各种Microsoft产品查找错误代码。

所以这应该让你开始寻找问题的根源。 如果你还没有,我build议把应用程序移到它自己的应用程序池中。

要获得有关崩溃的更多信息,可以使用Debug Diagnostics 。 偶尔我遇到了这个工具的问题,所以你可能需要使用adplus,这是Windowsdebugging工具的一部分。 你可以像这样使用adplus。

find您的应用程序池的PID:

H:>%windir%\ system32 \ inetsrv \ appcmd list wp WP“4072”(applicationPool:RDWebAccess)

针对该PID运行adplus:

adplus -quiet -crash -p 4072 -o PATH_TO_DUMPFILE

一旦你有一个转储,你可以加载它在WinDbg(这也是Windows的debugging工具的一部分),并运行命令“!analyze -v”来使其诊断崩溃。

我build议在启用adplus或Debug Diagnostics之前禁用应用程序池的回收,以便应用程序池不会断开debugging器的回收。

根据错误代码,在Perfmon中设置一个计数器日志可能也是一个好主意,以查看是否可以将任何资源争用(高CPU,低可用内存,大量等待请求等)与崩溃相关联。