Рабочий процесс IIS перезапускается без уничтожения w3wp?
Я использую приложение ASP.NET на IIS 7.
Сервер блаженно гудит, пока
- Событие Application_Start возникает
- Все запросы, сделанные в настоящее время подключенными пользователями, приводят к ошибке "Connection_Abandoned_By_ReqQueue" в httperrX.log
- Событие Application_End возникает
Это похоже на переработку рабочего процесса, верно? Но w3wp никогда не умирал, новый w3wp никогда не запускался, и не было зарегистрировано никакого повторного использования.
Что могло вызвать это? И как мне предотвратить это?
Технические детали:
- Windows Server 2008 R2
- IIS 7
- .Net v4.0 пул приложений с классическим конвейером
- Максимум 1 рабочий процесс с включенным перекрытием
Обновить
Я столкнулся с этой ситуацией при нагрузочном тестировании веб-приложения.
На протяжении всего процесса тестирования я много раз перезагружал и перезапускал веб-сервер. Очевидно, это изменяет криптографический ключ, используемый для получения веб-ресурсов, как объяснено здесь: исключение "Заполнение недопустимо и его нельзя удалить" в WebResource.axd. Программное обеспечение для тестирования недостаточно умен, чтобы менять свои запросы (без значительных ошибок) в ответ на новый ключ.
Результатом всего этого было то, что несколько запросов не выполнялись с криптографическими исключениями.Net. Я решил, что мне не нужны эти запросы, и удалил их из теста. Это, кажется, заботится о странной псевдо-переработке, о которой этот вопрос.
Две вещи остаются неизвестными:
- Переработка вызвана ошибочными запросами к WebResource.axd или любыми запросами к WebResource.axd?
- Почему это вызывает псевдо-рециркуляцию вместо обычной рециркуляции или вообще без рециркуляции? Поведение до сих пор без документов.
2 ответа
Каждый раз, когда файл изменяется в папке приложения, это может вызвать перезапуск пула приложений. Антивирусные мониторы реального времени печально известны этим, но на самом деле список потенциальных нарушителей довольно большой. Проверьте следующее от Тесс Феррандез:
В частности, вы можете разрешить событию мониторинга работоспособности ASP.Net записывать активность в журнал событий приложения с указанием причины перезапуска.
Событие Application_Start будет инициировано только один раз, в начале жизни приложения. Я не слышал о Connection_Abandoned_By_ReqQueue, но похоже, что веб-приложение делает что-то необычное в обработчике Global.asax для Application_Start.
Событие Application_End вызывается из-за исключительной ситуации, приводящей к закрытию приложения; отмечая конец жизненного цикла приложений.
Я предполагаю, что вы знаете о жизненном цикле приложения ASP .Net в том, что касается IIS6 и IIS7, если нет:
IIS 6.0 - http://msdn.microsoft.com/en-us/library/ms178473.aspx
IIS 7.0 - http://msdn.microsoft.com/en-us/library/bb470252.aspx
Эти статьи могут помочь устранить любую путаницу, если вы не рассматривали этот материал раньше.
Чтобы решить эту проблему, я бы начал с определения неисправного приложения. Если вы можете, посмотрите на обработчики Global.asax, в противном случае проверьте наличие обновлений для приложения.
Это также может быть случай повреждения памяти в соответствии с одним потоком, который я прочитал об исключении, которое вы получаете, но я не уверен, где вы начнете расследовать, если это так.