【发布时间】:2011-07-28 09:27:43
【问题描述】:
我在我们的 ASP.NET 应用程序中遇到了一个问题,有时夜间回收会导致 w3wp 挂起。
会发生这样的事情:
触发循环。显然,这会在所有正在运行的线程上强制 ThreadAbortException。但是,它似乎并没有触发新的 w3wp,或者实际上是新的 w3wp 引发了异常(还没有能够重现它)。
在我的日志中,我收到很多 ThreadAbortException,并且线程数无限增加,这意味着任何新请求都会产生一个永远不会完成的新线程。如果这将是旧的 w3wp,那么任何新请求都将被路由到新启动的 w3wp。
关闭超时和快速故障保护似乎都没有触发,导致 saite 在手动回收之前不可用。大多数情况下,它也会消耗大量 CPU,导致服务器也几乎无法使用。
我们正在使用可能与它没有任何关系的 Monorail MVC,但是我们确实使用了他们的 RescueController 系统。如果我们在错误处理中无意中捕获了 ThreadAbortException,是否会导致无限循环导致 w3wp 严重挂起以致 IIS 无法从中恢复?
【问题讨论】:
-
可能要确保您正在记录所有回收事件。来自 powershell:
set-webconfigurationproperty /system.applicationHost/applicationPools/applicationPoolDefaults/recycling -name:logEventOnRecycle -value:"Time, Requests, Schedule, Memory, IsapiUnhealthy, OnDemand, ConfigChange, PrivateMemory"
标签: asp.net iis-7.5 castle-monorail w3wp threadabortexception