1

我们已将 ASP.NET 4 应用程序迁移到新服务器 (2008 R2) 并受到令人讨厌的生产问题的困扰 - ASP.NET 工作进程中偶尔出现堆栈溢出。

这些记录在事件日志中:

Faulting application name: w3wp.exe, version: 7.5.7601.17514, timestamp: 0x4ce7afa2
Faulting module name: clr.dll, version: 4.0.30319.269, time stamp: 0x4ee9d6e1 
Exception code: 0xc00000fd 
Fault offset: 0x0000000000003fbc 
Faulting process id: 0x17ec 
Faulting application start time: 0x01cdb8e2663f86bc 
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe 
Faulting module path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 
Report Id: 45eb70a1-24da-11e2-a0b9-005056ba357d

有时故障模块是 MSVCR100_CLR0400.dll,它来自 VC++ 可再发行组件 - 但我认为 C++ 没有在项目中的任何地方使用过

Windows 已经很好地记录了在 Visual Studio 中打开的转储。它抱怨“没有为 w3wp.exe 加载符号”,所以我只有在尝试调试时才设法进行反汇编,而调用堆栈只是一个条目:

clr.dll!000007fef9afd01b()

这是在故障模块是 clr.dll 的情况下。另一种异常情况,当模块为MSVCR100_CLR0400.dll时:

MSVCR100_CLR0400.dll!000007fef9a3c9fa()
[Frames below may be incorrect and/or missing, no symbols loaded for MSVCR100_CLR0400.dll] MSVCR100_CLR0400.dll!000007fef9a57fcb()
MSVCR100_CLR0400.dll!000007fef9a33ee4()
MSVCR100_CLR0400.dll!000007fef9a33f5d()
clr.dll !000007fef9b05a08()

看起来相当有说服力的是,错误不是来自我的代码,而是来自 CLR / ASP.NET 内部——我整理了一个测试应用程序,通过无限递归强制堆栈溢出。我得到了转储,在 VS 中分析它,当我调试时,我点击了递归调用的确切行。

另一方面,故障出现在应用程序中的特定行,因此不是随机效应——但也不是每次,只是偶尔,并且从未在生产环境之外重现。

这也不是并发问题——它只记录了 1 个在线用户。

不用说,我已经尝试了基本的故障排除技术 - 到处尝试捕捉,在每一行之后记录,Application_Error - 什么都没有。执行只是在某个时候停止,我在 Windows 日志中收到错误条目

应用程序池处于集成模式,在为此目的创建的服务帐户下运行。

4

0 回答 0