IIS 8.5 "Служба недоступна" вместо сообщения об ошибке
Интересно, может ли кто-нибудь помочь мне с этим. (Извините, это может быть TL;DR для некоторых..)
Недавно мы перенесли наш веб-сайт C# MVC с одного сервера на другой аналогичный облачный сервер спецификаций (первый - 2 vCPU, 4 ГБ, 64-битный WS2012 IIS 8, новый - 4 vCPU, 4 ГБ, 64-битный WS2012 R2 IIS 8.5).
Пройдя первоначальные трудности настройки MVC, переписать модуль и т. Д., Мы успешно настроили новую систему - не считая одной маленькой проблемы. В системе есть несколько более длительных отчетов в виде хранимых процедур, которые обычно выполняются около 5 минут. Ранее нам приходилось увеличивать для них значение script- и commandTimeouts, чтобы они не генерировали обычное исключение "истекло время ожидания соединения". Мы проверили еще раз, и эти отчеты все еще работают на старых серверах. Однако на новом сервере те же отчеты начали выдавать ошибку "Служба недоступна" при выполнении, которая фактически убивает сайт на несколько минут, если только мы не перезапустим сайт и не перезапустим пул приложений (в зависимости от команды appcmd, пул приложений остается в состояние "запущено", но все остальные разделы веб-сайта имеют ту же ошибку "служба недоступна").
Поэтому, попробовав это с хостинг-провайдером, все, что нам удалось определить, это то, что после запуска хранимой процедуры она запускается - и, вероятно, заканчивается - в фоновом режиме, но сообщение о недоступности службы появляется через 30 секунд (1 минута 5 секунд). в некоторых случаях).
Думая, что это может быть вызвано двумя причинами: нехватка ресурсов или длительность процесса, я смоделировал хранимую процедуру, которая выполняет только 2-минутную команду WAITFOR. Этот процесс приводит к тому, что тот же сервис недоступен.
Это для меня означает, что проблема в IIS или в коде. Затем я прошел все необходимые петли:
- Папка%systemdrive%\windows\system32\logfiles\httperr, показывающая Connection_Abandoned_By_ReqQueue при каждом тайм-ауте,
- изменил быструю защиту от сбоев до 10 ошибок за 1 минуту
- EventLog не показывает никаких предупреждений или ошибок, связанных с этим
Затем я применил блоки try-catch к ошибочным битам, надеясь, что смогу получить больше информации о проблеме, но вместо того, чтобы получать какие-либо ошибки, пул приложений, похоже, закрывается до того, как ошибка будет выпущена.
Итак, мой вопрос: есть ли способ, чтобы я мог лучше понять, почему это происходит?
Но что еще более важно: есть ли способ заставить систему выдать ошибку вместо выключения?
Спасибо за помощь. Нужна дополнительная информация, пожалуйста, дайте мне знать.
ОБНОВИТЬ
А пока мне удалось раскрыть еще один важный момент. Настройка локального веб-сайта в IIS (как при подключении к localhost через хосты), который указывает на тот же код и базу данных, что и удаленный URL - на самом деле работает нормально. Ошибка "Служба недоступна", и выполнение завершается без тайм-аута.
Я попытался отключить брандмауэр, чтобы выяснить, вызывает ли это его, но это ничего не изменило. Я надеюсь, что это может подсказать кто-то..
1 ответ
Несмотря на то, что это заняло у меня около недели, мне, наконец, удалось решить свою проблему - последнее опубликованное обновление побудило меня посмотреть за пределы сервера, и вуаля!
К сожалению, при настройке нового сервера Rackspace посоветовала нам использовать балансировщик нагрузки, который, игнорируя любые расширения тайм-аута, просто отключал весь трафик на сайт и с сайта после 30-секундного тайм-аута. Зачем? Я не могу сказать. Я надеюсь, что есть кто-то, кто может.
Все еще исследую, как и почему это может произойти, но я решил оставить этот вопрос здесь вместо того, чтобы удалить вопрос, на случай, если кто-то столкнется с той же проблемой - надеюсь, это может сэкономить потраченные часы.