Каковы возможные причины, по которым IIS бросает исключение ThreadAbortException и перерабатывает работника, при регистрации IIS "Изменение конфигурации IIS"?
Я начал видеть ошибки в веб-приложении .NET MVC, размещенном на Appharbor, в то время как фоновый поток работал - после тщательного анализа - я не могу решить причину.
Во-первых, исключение, которое я заметил, это ThreadAbortException
.
Однако это действительно означает, что поток уничтожается. Перед тем как поток будет убит, вы увидите, что новый рабочий создается IIS, а Application_Start
вызывается на том же компьютере. Когда новое приложение запущено и запущено, IIS убивает старое приложение, и новые запросы обрабатываются, как ожидалось.
В то же время IIS регистрирует сообщение:
ShutDown Message: IIS configuration change
HostingEnvironment initiated shutdown
HostingEnvironment caused shutdown
ShutDown Stack: at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
at System.Environment.get_StackTrace()
at System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal()
at System.Web.Hosting.HostingEnvironment.InitiateShutdownWithoutDemand()
at System.Web.Hosting.PipelineRuntime.StopProcessing()
В журнале мониторинга .Net Health Monitor вы получаете:
Message: Application is shutting down. Reason: Configuration changed.
Event Detail Code: 50004
Быстрый google показывает, что исходный код, который я подозреваю, является причиной ошибки:
if (!HostingEnvironment.StopListeningWasCalled && !HostingEnvironment.ShutdownInitiated) {
// If GL_STOP_LISTENING wasn't triggered, the reset is likely due to a configuration change.
HttpRuntime.SetShutdownReason(ApplicationShutdownReason.ConfigurationChange, "IIS configuration change");
}
источник: https://github.com/Microsoft/referencesource/blob/master/System.Web/Hosting/IPipelineRuntime.cs
Моя первая мысль заключалась в том, чтобы проверять временные метки для изменений файла, как в папке bin, так и в главном каталоге приложения, однако эта ошибка вызывается без каких-либо изменений файла. Учитывая, что это происходит только на Appharbor, я не могу приложить к процессу и отлаживать этот путь. Я также отслеживал использование памяти и не вижу никаких проблем.
В исходном коде указано:
Если GL_STOP_LISTENING не был запущен, reset является вероятным из-за изменение конфигурации.
Следовательно, что еще может вызвать ошибку и приложение, если файлы web.config/other config не изменяются?
Ответы
Ответ 1
Похоже, это ошибка Microsoft.
Неожиданное завершение работы ASP.Net после многих файлов App_Data изменения происходят на сервере под управлением Windows Server 2012 R2
Исправление: https://support.microsoft.com/en-us/kb/3052480
Последний отзыв: 09/08/2015 16:29:00
Как только это исправление было применено, ошибки ушли!
Ответ 2
Есть много причин, которые перечислены в этой полезной записи в блоге.
- Настройки пула приложений
- Элемент processModel файла machine.config
- Ограничение памяти
- Ограничение запроса
- Тайм-аут
Ответ 3
Изменение конфигурации IIS должно происходить, когда что-то (что-либо) изменяется в конфигурации или коде приложения IIS. Примеры:
- Изменение в web.confg
- Изменение в любой dll, aspx и т.д.
В любом из этих случаев приложение IIS будет перерабатываться. Кроме того, IIS будет перерабатывать ваш процесс каждые 29 часов по умолчанию, но это, вероятно, не будет называться "Изменение конфигурации IIS"