Вопрос или проблема
Используя Windows 10 / IIS 10
У меня есть веб-приложение, и я настроил следующее:
- AppPool: Режим запуска = AlwaysRunning
- Веб-приложение: Включить предзагрузку = true
Но все равно веб-приложение отключается:
- Рабочий процесс с идентификатором процесса ‘nnnnn’, обслуживающий пул приложений ‘Ssss’, был отключен из-за бездействия. Конфигурация таймаута пула приложений была установлена на 20 минут. Новый рабочий процесс будет запущен по мере необходимости.
Хорошо, решение состоит в том, чтобы установить Таймаут бездействия (минуты) для AppPool на большое число или (я предполагаю, ноль, чтобы обозначить “не отключать”).
Тем не менее, я полагал, что “AlwaysRunning” переопределяет Таймаут бездействия — очевидно, это не так.
Может кто-то объяснить или указать на что-то, что объясняет, что именно делает каждая настройка и как они (не?) взаимосвязаны.
Спасибо
Согласно этому ответу, вам следует установить Таймаут бездействия на 0, даже если это может противоречить документации Microsoft.
Ответ или решение
Для устранения проблемы с отключением приложения IIS AppPool из-за неактивности, даже после настройки нужных параметров, необходимо разобраться в том, как работают настройки пула приложений в Internet Information Services (IIS).
Проблема
Вы настроили пул приложений следующим образом:
- Режим запуска: AlwaysRunning (Всегда запущен)
- Предварительная загрузка веб-приложения: Включена
Тем не менее, вы получаете сообщение о том, что рабочий процесс с указанным идентификатором завершил работу из-за неактивности, и возникает новый рабочий процесс при необходимости.
Объяснение настроек
-
AlwaysRunning: Эта настройка предназначена для обеспечения того, чтобы пул приложений всегда находился в запущенном состоянии. Однако эта опция не отменяет настройки времени простоя (Idle Timeout). Она поможет в том, что при обращении к приложению в нем всегда будет запущен рабочий процесс, и он не будет выключаться до тех пор, пока есть очередные запросы.
-
Idle Timeout (Время простоя): Эта параметр устанавливает период (в минутах), по истечении которого, если не было запросов к приложению, IIS завершит рабочий процесс, чтобы освободить ресурсы. Значение по умолчанию составляет 20 минут. Но даже если пул настроен как AlwaysRunning, таймаут все равно будет применяться, если не было активности.
Решение проблемы
Чтобы избежать завершения рабочего процесса из-за неактивности, вы можете изменить настройку Idle Timeout следующим образом:
- Установите значение Idle Timeout на 0. Это может временно казаться некорректным с точки зрения документации Microsoft, но на практике это гарантирует, что пул приложений никогда не будет завершен из-за времени простоя.
Шаги для изменения настроек:
- Откройте IIS Manager.
- Найдите ваш пул приложений в разделе Application Pools.
- Щелкните правой кнопкой мыши на нужный пул приложений и выберите Advanced Settings.
- Найдите параметр Idle Time-out (minutes) и установите его значение на 0.
- Примените настройки и перезапустите пул приложений для того, чтобы изменения вступили в силу.
Заключение
Надеюсь, данное объяснение помогло прояснить взаимосвязь между настройками AlwaysRunning и Idle Timeout. Настройка Idle Timeout на 0 поможет избежать завершения вашего приложения IIS из-за неактивности, даже при том, что пул настроен на запуск "всегда". Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.