Как прогреть мое веб-приложение asp.net mvc после перезагрузки пула приложений?

23

Я использую веб-приложение ASP.NET MVC в IIS 8.0. Мое приложение должно быть разогрето, прежде чем принимать запросы. У нас уже есть процесс автоматического прогрева приложения при развертывании нового кода. Однако мы наблюдаем периодические события перезапуска пула приложений, которые приводят к тому, что приложение не прогревается.

Есть ли лучшая практика для обнаружения события перезапуска пула приложений и выполнения сценария или некоторого кода?

AgileJon
источник

Ответы:

55

Есть несколько вещей, которые вы можете сделать:

1. Инициализация приложения

Вы можете использовать модуль инициализации приложения, который входит в комплект поставки IIS 8.0

вы можете иметь что-то подобное в вашем web.config

<applicationInitialization
     doAppInitAfterRestart="true" >
   <add initializationPage="/" />
</applicationInitialization>

Это будет отправлять запрос в корень вашего приложения ( initializationPage="/") каждый раз, когда ваше приложение запускается автоматически.

Вы также можете настроить режим запуска для пула приложений, Always Runningчто означает, что при каждом перезапуске IIS он обязательно запустит пул приложений немедленно (если щелкнуть правой кнопкой мыши пул приложений,Advanced Settings

введите описание изображения здесь

и Preloadдля вашего сайта (щелкните правой кнопкой мыши на сайте, Manage SiteзатемAdvanced Settings

введите описание изображения здесь

2. Отключить время простоя

Кроме того, вы можете отключить idleTimeout (по умолчанию IIS закроет приложение после 20 минут активности), изменив значение in Idle Time-outдля пула приложений на 0 (бесконечно).

введите описание изображения здесь

3. Отключить периодическую переработку

также отключение Regular Time Interval (minutes)по умолчанию IIS будет перезапускать ваше приложение каждые 29 часов.

введите описание изображения здесь

Для

ahmelsayed
источник
3
Комментарии по поводу недостатков этих настроек приветствуются. Конечно, есть причина, по которой они не по умолчанию.
user42134
2
Несомненно, высокое потребление памяти, если вы запускаете несколько сайтов на одном устройстве IIS, так как все сайты остаются живыми все время, что приводит к очень низкой плотности сайтов. Также нет защиты от утечек памяти в ваших приложениях. Имейте в виду, что IIS существовал еще до того, как управляемые языки стали популярными для Интернета, и многие приложения работали с собственными обработчиками, которые попадали в утечки памяти и приводили в странное состояние, если оставались запущенными в течение длительного времени. Это было сделано, чтобы помочь системным администраторам, которые должны были проснуться среди ночи, для сброса серверов из-за проблем с приложениями. Они по-прежнему являются значениями по умолчанию, в основном по причинам обратной сопоставимости
ахмелсайд
1
Альтернативы в IIS 7.5 - Windows Server 2008 R2 ?
Kiquenet
2
Вы можете получить модуль инициализации приложения для IIS 7.5 для # 1 для работы. # 2 и # 3 применимы как есть к IIS 7.5
ahmelsayed
1
FYI для людей, использующих это: applicationInitializationидет в<configuration><system.webServer>
Пол
1

По моему опыту, AlwaysRunning и Preload с включенной поддержкой не сильно ускоряются. Наибольшее время ожидания уходит на динамическую компиляцию (которую можно исправить с помощью прекомпиляции aspx) и загрузку сборок в память и кеширование.

zmikic
источник