IIS工作进程回收不杀w3wp?

我在IIS 7上运行一个ASP.NET应用程序。

服务器幸福地嗡嗡直到

  1. 引发一个Application_Start事件
  2. 当前连接的用户发出的所有请求在httperrX.log中给出了“Connection_Abandoned_By_ReqQueue”错误
  3. 引发一个Application_End事件

它看起来像一个工人进程回收,对吧? 但w3wp永远不会死亡,一个新的w3wp永远不会开始,没有回收logging。

这可能是什么造成的? 我如何防止它发生?


技术细节:

  • Windows Server 2008 R2
  • IIS 7
  • .Net v4.0应用程序池与经典pipe道
  • 最大1个工作进程启用重叠

更新

我在加载testingWeb应用程序时遇到这种情况。

在整个testing过程中,我已经多次回收并重新启动Web服务器。 显然,这改变了正在使用的encryption密钥来获取networking资源,如下所述: WebResource.axd上的“Padding is Invalid and Can not be removed”exception 。 testing软件不够聪明,以响应一个新的密钥来改变它的请求(没有显着的finagling)。

所有这一切的结果是,几个请求与.Netencryption例外失败。 我确定我不关心这些请求,并将其从testing中删除。 这似乎照顾了这个问题是关于奇怪的假回收。

还有两件事情是未知的

  1. 是由WebResource.axd的错误请求还是WebResource.axd的任何请求导致的回收?
  2. 为什么这会导致伪回收,而不是定期回收或根本没有回收? 行为仍然是无证的。

只要应用程序文件夹中的文件发生更改,就会触发应用程序池的回收。 防病毒实时监控器是臭名昭着的,但实际上有相当多的潜在违规者列表。 从苔丝费兰德斯检查以下内容:

http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx

尤其是,您可以启用ASP.Net运行状况监视事件,将活动logging到应用程序事件日志中,并重新启动。

Application_Start事件只会在应用程序生命周期开始时提升一次。 Connection_Abandoned_By_ReqQueue不是我听说过的,但是听起来像一个Web应用程序在Application_Start的Global.asax处理程序中做了一些不寻常的事情。

由于导致应用程序退出的exception,Application_End事件被触发; 标志着应用程序生命周期的结束。

我假设你知道ASP.Net应用程序的生命周期,因为它适用于IIS6和IIS7,如果不是的话:

IIS 6.0 – http://msdn.microsoft.com/en-us/library/ms178473.aspx
IIS 7.0 – http://msdn.microsoft.com/en-us/library/bb470252.aspx

如果你以前没有看过这些东西,这些文章可能有助于消除任何困惑。

要解决这个问题,我首先要确定错误的应用程序。 如果可以,请查看Global.asax处理程序,否则,检查应用程序的更新。

这也可能是一个内存损坏的情况下,根据我读到的exception,你得到的一个线程,但我不知道你会开始调查,如果是这样的话。