我们的网站是.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正常工作,目前正在尝试解决这个问题。
如果有人能帮助我们或指引我们朝着正确的方向发展,那将非常棒,谢谢。
我已经按照这里指示使用了Debug Diag和WinDbg:http://blogs.msdn.com/b/tess/archive/2009/03/20/debugging-a-net-crash-with-rules-in-debug-diag.aspx,但我们无法让Windbg正常工作,目前正在尝试解决这个问题。
如果有人能帮助我们或指引我们朝着正确的方向发展,那将非常棒,谢谢。