w3wp偶尔挂在夜间回收

时间:2011-07-28 09:27:43

标签: asp.net iis-7.5 castle-monorail w3wp threadabortexception

我遇到过我们的ASP.NET应用程序的问题,偶尔每晚都会回收w3wp挂起的情况。

这就是:

触发回收。显然,这会强制所有正在运行的线程上的ThreadAbortException。但是,它似乎没有触发新的w3wp,或者是新的w3wp实际上抛出了异常(还没有能够重现它)。

在我的日志中,我得到了很多ThreadAbortException,并且线程数无限期地上升和下降,这意味着任何新请求都会产生一个永不完成的新线程。如果这是旧w3wp,任何新请求都将路由到新启动的w3wp。

关闭超时和快速失败保护似乎也没有触发,在手动回收之前,saite不可用。大多数情况下,它也消耗了大量CPU,使服务器几乎无法使用。

我们正在使用Monorail MVC,它可能与它没有任何关系,但我们确实使用了他们的RescueController系统。如果我们在错误处理中无意中捕获ThreadAbortException,是否会导致无限循环导致w3wp严重挂起以至于IIS无法从中恢复?

2 个答案:

答案 0 :(得分:1)

由于资源限制,IIS无法成功启动新的工作进程,可能是由于可用内存不足。

尝试调整IIS中的私有内存限制,减少最大工作进程数(即Web Garden)(很少将其设置为大于1 - 如果设置得高于可能存在潜在问题的话),增加您的服务器上可用的物理RAM,适当地调用Marshal.ReleaseComObject,以及排除阻止释放内存的内容。您甚至可以考虑将垃圾收集模式从服务器更改为工作站(请参阅http://msdn.microsoft.com/en-us/library/ms229357.aspx)。

答案 1 :(得分:0)

事实证明,我们有一个Exception的递归try catch循环,它捕获ThreadAbortException并因为继承而调用自身,因此它变成了一个无限递归。

我们有异常的catch,因为我们想要记录和一些错误处理,并且除了ThreadAbortException将在执行期间继续抛出外,在所有其他方面可能都没问题。