Я столкнулся с проблемой с нашим приложением ASP.NET, из-за которой иногда из-за ночного перезапуска w3wp зависает.
Вот что происходит:
Recycle запущен. очевидно, это вызывает исключение ThreadAbortException во всех запущенных потоках. Однако он, похоже, не запускает новый w3wp, или это новый w3wp, который на самом деле выдает исключение (пока не смог его воспроизвести).
В моих журналах я получаю много исключений ThreadAbortException, и количество потоков просто увеличивается и увеличивается до бесконечности, что означает, что любой новый запрос порождает новый поток, который никогда не завершается. Если бы это был старый w3wp, любой новый запрос был бы перенаправлен во вновь запущенный w3wp.
Кажется, что ни тайм-аут отключения, ни защита от быстрого отказа не срабатывают, оставляя сайт недоступным, пока он не будет переработан вручную. Большую часть времени он также израсходует много ресурсов ЦП, в результате чего сервер практически не работает.
Мы используем Monorail MVC, который, вероятно, не имеет к этому никакого отношения, однако мы используем их систему RescueController. Если мы хотим непреднамеренно перехватить исключение ThreadAbortException при обработке ошибок, может ли это привести к бесконечному циклу, который так сильно повредит w3wp, что IIS не сможет восстановить его?