ASP.NET 工作进程经常崩溃

ASP.NET 工作进程经常崩溃

我们在 Windows Server 2003 上运行的 IIS6 上托管了一个 Web 应用程序,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 周没有进行任何更新。令人惊讶的是,截至上周四一切都很好,但本周情况却开始恶化。

答案1

不幸的是,IIS 错误消息不太具象。我建议安装类似IIS 调试它将运行并监视 IIS,并在崩溃时记录详细的崩溃信息,以便您诊断问题。

答案2

系统日志中应该还有另一条类似的消息,它会给您一个错误代码:

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

您可以使用以下代码查找错误代码(进程退出代码)Microsoft Exchange 错误查找工具。我知道这个问题与 Exchange 无关,但该工具适用于查找各种 Microsoft 产品的错误代码。

因此,这应该可以让你开始寻找问题的根源。如果你还没有这样做,我建议将应用程序移到它自己的应用程序池中。

要获取有关崩溃的更多信息,您可以使用调试诊断。我偶尔会遇到该工具的问题,因此您可能需要使用 adplus,它是 Windows 调试工具的一部分。您可以像这样使用 adplus。

查找应用程序池的 PID:

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

针对该 PID 运行 adplus:

adplus –quiet –crash –p 4072 –o PATH_TO_DUMPFILE

一旦您有了转储,您就可以将其加载到 WinDbg(也是 Windows 调试工具的一部分)中并运行命令“!analyze -v”以使其诊断崩溃。

我建议在启用 adplus 或调试诊断之前禁用应用程序池的回收,以便应用程序池不会断开调试器的连接进行回收。

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

相关内容