Рабочий процесс IIS перезапускается без уничтожения w3wp?

Я использую приложение ASP.NET на IIS 7.

Сервер блаженно гудит, пока

  1. Событие Application_Start возникает
  2. Все запросы, сделанные в настоящее время подключенными пользователями, приводят к ошибке "Connection_Abandoned_By_ReqQueue" в httperrX.log
  3. Событие Application_End возникает

Это похоже на переработку рабочего процесса, верно? Но w3wp никогда не умирал, новый w3wp никогда не запускался, и не было зарегистрировано никакого повторного использования.

Что могло вызвать это? И как мне предотвратить это?


Технические детали:

  • Windows Server 2008 R2
  • IIS 7
  • .Net v4.0 пул приложений с классическим конвейером
  • Максимум 1 рабочий процесс с включенным перекрытием

Обновить

Я столкнулся с этой ситуацией при нагрузочном тестировании веб-приложения.

На протяжении всего процесса тестирования я много раз перезагружал и перезапускал веб-сервер. Очевидно, это изменяет криптографический ключ, используемый для получения веб-ресурсов, как объяснено здесь: исключение "Заполнение недопустимо и его нельзя удалить" в WebResource.axd. Программное обеспечение для тестирования недостаточно умен, чтобы менять свои запросы (без значительных ошибок) в ответ на новый ключ.

Результатом всего этого было то, что несколько запросов не выполнялись с криптографическими исключениями.Net. Я решил, что мне не нужны эти запросы, и удалил их из теста. Это, кажется, заботится о странной псевдо-переработке, о которой этот вопрос.

Две вещи остаются неизвестными:

  1. Переработка вызвана ошибочными запросами к WebResource.axd или любыми запросами к WebResource.axd?
  2. Почему это вызывает псевдо-рециркуляцию вместо обычной рециркуляции или вообще без рециркуляции? Поведение до сих пор без документов.

2 ответа

Каждый раз, когда файл изменяется в папке приложения, это может вызвать перезапуск пула приложений. Антивирусные мониторы реального времени печально известны этим, но на самом деле список потенциальных нарушителей довольно большой. Проверьте следующее от Тесс Феррандез:

http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx

В частности, вы можете разрешить событию мониторинга работоспособности 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, в противном случае проверьте наличие обновлений для приложения.

Это также может быть случай повреждения памяти в соответствии с одним потоком, который я прочитал об исключении, которое вы получаете, но я не уверен, где вы начнете расследовать, если это так.

Другие вопросы по тегам