我们的网站在 .NET 中,但其中也包含一些旧的 ASP 和 32 位库。它已经工作了一段时间(2年)。但是在过去的一个月里,我们在 IIS7 服务器上看到了以下错误,我们无法追踪和修复:
“故障应用程序 w3wp.exe,版本 7.0.6001.18000,时间戳 0x47919413,故障模块 kernel32.dll,版本 6.0.6001.18215,时间戳 0x4995344f,异常代码 0xe053534f,故障偏移量 0x0002f328,进程 ID 0x%9,应用程序启动时间 0%x 10。”
我们能够重现错误:
我们的 .ASPX 页面之一开始加载、执行代码和查询(我们在整个页面上都有 response.flush() 以跟踪代码中断的位置),然后它突然停止并且我们在 IIS 中收到上述错误。
页面停止加载,并且没有 response.flush(),它不会重定向到我们的 error.aspx 页面(在 web.config 中配置)
错误不会一直发生。有时,它连续发生 3 次,然后在正确重定向到 error.aspx 的情况下不间断地工作 15 分钟。
我们得到的错误是一个经典的错误:“BOF 或 EOF 为 True,或者当前记录已被删除。”
发生错误时,页面会挂起,并且来自任何浏览器的同一台计算机上的所有其他会话也会挂起网页(顺便说一句,我们在测试时只允许 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 工作,这是我们目前正在尝试做的事情。
如果有人可以帮助我们或为我们指明正确的方向,那就太好了,谢谢。