博客园Blog程序遇到的奇怪问题
博客园的Blog程序升级到ASP.NET 2.0之后,一直被这样的问题困扰:
出现问题时,从客户端看,浏览器处于连接状态,却一直得不到服务器的响应。从服务器看,CPU占用很低,不超过10%。我对这种现象的理解是:IIS接收了请求并转发给ASP.NET 2.0进程处理,而ASP.NET 2.0进程处于不工作状态,不对请求作出响应。
IIS 6的应用程序池每隔30秒(默认设置)会检查工作者进程的健康状况,发现了ASP.NET 2.0进程的这种异常情况后,立即关闭该进程,建立创新的进程,新的进程忙碌一阵后,系统恢复正常。
事件日志中的相关信息:
系统日志(Event ID: 1010):
A process serving application pool 'APP_CNBlogs' failed to respond to a ping. The process id was '3520'.
说明:这是应用程序池检查工作者进程的健康状况时记录的信息。
该问题的发生没有什么规律,次数不定,访问量大时,发生的次数多一点,更新dll文件后,发生的概率也比较高。
这种不工作状态是因为程序执行中发生了死锁,还是ASP.NET 2.0引擎发现了异常,主动退出了运行,ASP.NET 2.0有这种特性,微软的文档中说如果在ASP.NET 2.0程序运行中发生未处理异常,程序会退出运行,我已经针对这种情况按照微软的文档进行了处理,问题依然存在。我发觉即使了发生未处理异常,情况并不像文档中所说的那样程序会退出,ASP.NET 2.0会将异常记入事件日志,程序照常运行。
到现在我也没找到问题的原因,在出现问题时,ASP.NET 2.0运行时没有在事件日志中记录一些相关信息,我也没想到什么办法能捕捉到发生问题时的更多信息,在程序中也没找到引起进程死锁的代码。
是博客园程序的Bug还是ASP.NET 2.0的Bug? 目前还没找到问题的线索,今天写出来,一是希望了解有没有朋友遇到过这个问题,二是希望有经验的朋友提供一些建议。
相关文章:为什么应用程序池总是崩溃(Crash)