IIS7:w3wp.exe 应用程序故障,这些崩溃的根本原因是什么?

6
我们的网站是.NET构建的,但其中还包括一些旧的ASP和32位库。它已经运行良好两年了。但在过去一个月中,我们在IIS7服务器上看到了以下错误,我们一直无法找到并修复该错误: “故障应用程序w3wp.exe,版本7.0.6001.18000,时间戳0x47919413,故障模块kernel32.dll,版本6.0.6001.18215,时间戳0x4995344f,异常代码0xe053534f,故障偏移量0x0002f328,进程ID 0x%9,应用程序启动时间0x%10。” 我们能够重现此错误: 我们的一个.ASPX页面开始加载、执行代码和查询(我们在页面上到处使用response.flush()来跟踪代码断点),然后突然停止,我们在IIS中得到了上述错误。 页面停止加载,并且没有response.flush(),它不会重定向到我们在web.config中配置的error.aspx页面。 错误并非总是发生。有时,它连续发生3次,然后正常工作15分钟,不间断地重定向到error.aspx。 我们得到的错误是经典的:“BOF或EOF为真,或当前记录已被删除”。 当出现错误时,页面挂起,同一台计算机上所有其他浏览器的会话也都挂起了(顺便说一下,我们在测试时只允许1个工作进程)。从其他计算机上,该站点加载正常。 我可以回收应用程序池、终止w3wp.exe、重新启动IIS。什么都不会发生。唯一成功重新加载页面的方法是重新启动处理我们会话状态的MS SQL。我不知道为什么会这样,但我们猜测用户浏览器上的会话Cookie指向了未正确终止的线程(由于上述崩溃),IIS正在等待其终止以处理更多代码(?)。如果有人能更好地解释这一点,那将非常有帮助。我们可以设置“终止”线程的超时时间吗?这是与MS SQL相关的问题吗? 我还查看了私有和虚拟内存使用情况,因为我认为我们的代码不是最有效的,我确定我们还有剩余的内存泄漏。然而,即使私有和虚拟内存仍然相当低(每个都低于100MB),我仍然看到页面崩溃。
我已经按照这里指示使用了Debug Diag和WinDbg:http://blogs.msdn.com/b/tess/archive/2009/03/20/debugging-a-net-crash-with-rules-in-debug-diag.aspx,但我们无法让Windbg正常工作,目前正在尝试解决这个问题。
如果有人能帮助我们或指引我们朝着正确的方向发展,那将非常棒,谢谢。

最好清楚地说明你遇到了什么WinDbg问题。 - Lex Li
4个回答

2
"Either BOF or EOF is True, or the current record has been deleted"的意思是表为空,您正在尝试进行MoveNext操作。因此,在执行任何移动操作之前请检查是否已到达文件末尾
IIS因w3wp.exe中的内核错误而臭名昭著,所有会话状态中的错误都只是崩溃进程的症状。多个APP池帮助不大,它们只会扩散错误。
我敢打赌这是由于用户环境更改导致的SQL死锁。这将导致10秒钟的延迟,因为SQL尝试确定要终止哪个查询。一个胜利,一个失败。失败者会得到一个指向意外空表的指针,然后您尝试移动并随后崩溃。您可以将DB指向ODBC连接并打开跟踪,或找出一种使SQL记录日志的方法。
我在Perl中遇到了与上述所有症状相同的问题。我能够创建一个包装器fn()来执行所有SQL查询并记录所有sql、+参数和任何错误到磁盘以跟踪问题。这是死锁,然后我们能够编写自动重试的代码,并最终重新编码查询顺序和扫描列以消除死锁。

0
在安装了Windows Server 2008R2机器上的Windows更新后,我们开始收到此错误。 Windows Process Activation Service(WAS)安装了一些额外的站点绑定,这对我们的设置造成了问题。
我们从网站中删除了net.tcp、net.pipe、net.msmq和msmq.formatname绑定,不再出现故障应用程序异常。

0

你引用/链接的程序集中可能有一个在磁盘上随机损坏的问题(这种情况确实会发生)。你能否在一个新的、干净的机器上复制出现的问题,该机器与你使用的最新xyz驱动程序具有相同的统计数据和新安装?

我通过这种方式解决了一个让我孤注一掷数月才隔离出来的神秘问题。看起来,具有相同规格和先决条件驱动程序的干净的新机器可以正常工作,只有一些旧机器无法正常工作。最终的原因是,在旧机器上,数据库客户端驱动程序已经损坏(所有旧机器都是克隆的,所以我认为它们在损坏发生后被克隆),即使我没有直接调用它,它似乎也会影响.NET内存空间。我甚至还没有回复我的"帮我调试这个怪物"帖子,因为我怀疑它是否真的会对任何人有所帮助。


非常感谢你,Mike。我们在三个不同的站点上有三种实现,使用不同的主机提供商提供的服务器。它们都崩溃了。我们购买了一台新服务器,从头开始重新安装,但它以相同的方式崩溃了。正如你建议的那样,我想知道我们的MS SQL或mySQL驱动程序是否已损坏。你是否也尝试过使用DebugDiag/Windbg来确定问题的来源? - yorrser

0

这可能是一个边缘情况,但以防万一有人在使用MVCMailer时遇到了同样的错误,我也曾因邮件发送器上的.SendAsync()方法而遇到过这个错误。

我将它们全部切换为.Send(),崩溃就停止了。

请参见this SO answer以了解如何异步使用邮件发送器并避免崩溃(据说,我个人没有实现)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接