IIS7 : Faulting application w3wp. exe,这些崩溃的根本原因是什么?

标签 iis iis-7 application-pool w3wp

我们的网站采用 .NET 语言,但也包含一些旧的 ASP 和 32 位库。它已经运行良好一段时间了(2 年)。但在过去的一个月里,我们在 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(),它不会重定向到我们的error.aspx页面(如web.config中配置的)

  • 该错误不会一直发生。有时,它会连续发生 3 次,然后它可以正常工作 15 分钟不间断,并正确重定向到 error.aspx。

  • 然后我们得到的错误是一个经典错误:“BOF 或 EOF 为 True,或者当前记录已被删除。”

  • 当错误发生时,页面会挂起,同一台计算机上任何浏览器的所有其他 session 也会挂起网页(顺便说一句,我们在测试时只允许 1 个工作进程)。在其他计算机上,该网站加载良好。

  • 我可以回收应用程序池,杀死w3wp.exe,重新启动IIS。什么也做不了。再次成功加载页面的唯一方法是重新启动处理 session 状态的 MS SQL。我不知道这是为什么,但我们猜测用户浏览器上的 session Cookie 指向一个未正确终止的线程(由于上述崩溃),并且 IIS 正在等待它终止以处理更多代码(? )。如果有人可以更好地解释这一点,那将非常有帮助。我们可以设置一个超时来“终止”线程吗?是 MS SQL 相关问题吗?

我还查看了私有(private)内存和虚拟内存的使用情况,因为我认为我们的代码不是最有效的,并且我确信我们还有剩余的内存泄漏。然而,我看到页面崩溃,尽管私有(private)内存和虚拟内存仍然很低(每个都低于 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工作,这就是我们目前正在尝试做的事情。

如果有人可以帮助我们或为我们指明正确的方向,那就太好了,谢谢。

最佳答案

“BOF 或 EOF 为 True,或者当前记录已被删除”表示表为空,并且您正在尝试执行 MoveNext。因此,在进行任何移动之前检查 eof

IIS 因在 w3wp.exe 中引发像这样的内核错误而臭名昭著。 session 状态中的所有错误都只是进程崩溃的症状。多个应用程序池不会有太大帮助 - 它们只会分散错误。

我敢打赌这是由于您的用户环境发生变化而导致的 SQL 死锁。当 SQL 尝试确定要终止哪个查询时,这将导致 10 秒的延迟。一胜一败。失败者取回一个指向意外空表的指针,您尝试移动并随后崩溃。您也许可以将数据库指向 ODBC 连接并打开跟踪,或者找到一种方法让 SQL 记录它。

我在 Perl 中遇到了与上述相同的症状。我能够制作一个包装器 fn() 来执行所有 SQL 查询并将所有 sql、+ 参数和任何错误记录到磁盘以追踪问题。这是死锁,然后我们能够在自动重试中进行编码,最终我们重新编码查询顺序并扫描列以消除死锁。

关于IIS7 : Faulting application w3wp. exe,这些崩溃的根本原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4416930/

相关文章:

c# - 无法使用 asp.net 在服务器端位置(C 盘或 D 盘)写入文件?

iis-7 - 如何在 IIS 经典模式池下托管 ASP.NET 5 (vNext) MVC 6 项目

powershell - 如何使用Powershell获取IIS应用程序池的 "periodic restart recycle value"

iis - Wix & Burn - 如果尚未安装,请安装 IIS

asp.net - 从命令行更改 web.config

javascript - 为 Web API URL 配置 Angularjs 路由

asp.net - IIS 7 如何将客户端证书映射到数据库中的用户帐户?

asp.net - 为IIS APPPOOL创建SQL Server登录-不同计算机上的IIS和SQL Server

asp.net - 使用dotMemory了解w3wp.exe中的非托管内存

asp.net - SQL1159 DB2 .NET 数据提供程序初始化错误,原因代码 10,标记 0.0.0、9.7.3