我在我们的 ASP.NET 应用程序中遇到了一个问题,有时夜间回收会导致 w3wp 挂起。
这就是发生的事情:
触发回收。显然,这会在所有正在运行的线程上强制 ThreadAbortException。但是,它似乎并没有触发新的 w3wp,或者实际上是新的 w3wp 引发了异常(还没有能够重现它)。
在我的日志中,我得到了很多 ThreadAbortException,并且线程数无限增加,这意味着任何新请求都会产生一个永远不会完成的新线程。如果这将是旧的 w3wp,那么任何新请求都将被路由到新启动的 w3wp。
关闭超时和快速故障保护似乎也没有触发,导致站点在手动回收之前不可用。大多数情况下,它也会消耗大量 CPU,使服务器也几乎无法使用。
我们正在使用可能与它没有任何关系的 Monorail MVC,但是我们确实使用了他们的 RescueController 系统。如果我们在错误处理中无意中捕获了 ThreadAbortException,是否会导致无限循环导致 w3wp 严重挂起以致 IIS 无法从中恢复?