Пулы приложений IIS - Остановка / Запуск против переработки

StackOverflow https://stackoverflow.com/questions/391878

Вопрос

Я заметил, что в одном из моих производственных веб-приложений, когда я вручную перерабатываю пул приложений, переработанный рабочий процесс может занять более 60 секунд, чтобы фактически быть полностью уничтоженным, основываясь на просмотре его в диспетчере задач.Однако, если я полностью остановлю пул приложений, рабочий процесс завершится почти мгновенно - в течение 1-2 секунд.

Итак, мой вопрос двоякий:

a) Почему требуется так много времени, чтобы уничтожить процесс (и, что более важно, освободить используемые / заблокированные им ресурсы), когда пул приложений перерабатывается, а не останавливается;и

б) Предполагая, что я прекратил перенаправление трафика на сервер, есть ли какая-либо причина НЕ останавливать / запускать вместо рециркуляции?


Редактировать:
Чтобы уточнить, прежде чем я либо переработаю, либо остановлю пул приложений, я прекращаю отправку трафика на соответствующий сервер (сервер находится в кластере с балансировкой нагрузки, и я удаляю сервер из балансировщика нагрузки).Таким образом, теоретически, не должно быть никаких запросов, поступающих на веб-сайт в то время, когда я что-либо делаю с пулом приложений.


Edit Part Deux:
После прочтения ссылки Игала мне кажется довольно очевидным, что происходит.Когда я перерабатываю пул приложений, запускается новый процесс, но поскольку трафика вообще нет, он не регистрирует новый процесс как функционирующий, поэтому он не отключает старый до истечения времени ожидания (которое составляет 90 секунд).).

Зная это, мне ясно, что функция "Recycle" специально предназначена для использования в середине потока на реальном сервере, и поскольку я заранее сливаю трафик вручную, мне следует вместо этого использовать stop / start.

Это было полезно?

Решение

а) Из-за Наложенная Переработка.Существует период времени, в течение которого "старый" процесс ожидает запуска нового.

б) Нет.Насколько я знаю.

Другие советы

Рециркуляция, если я правильно помню, позволяет завершить все существующие запросы, после чего она перезапустит пул приложений.Остановка просто завершается в тот самый момент, когда вы ее останавливаете.

Согласно эта ссылка,

Остановка – останавливая пул приложений, вы даете указание всем рабочим процессам IIS, обслуживающим этот пул приложений, завершить работу, и предотвращаете запуск любых дополнительных рабочих процессов до тех пор, пока пул приложений не будет запущен снова. Это инициирует изящное завершение работы рабочих процессов, при этом каждый рабочий процесс пытается обработать все свои запросы и затем завершить работу.

Если рабочий процесс не завершается в течение времени, указанного свойством конфигурации shutdownTimeLimit в processModel элемент определения каждого пула приложений (по умолчанию:90 сек), БЫЛ принудительно завершит его (этого не произойдет, если подключен собственный отладчик ).

Следовательно, остановка пула приложений является разрушительным действием, которое вызывает выгрузку ASP.NET доменов приложений, дочерних процессов FastCGI и потерю любого состояния приложения в процессе.

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

Повторное использование пула приложений - хороший способ вызвать сброс состояния приложения и любой конфигурации, кэшированной работником IIS процессы, которые не обновляются автоматически (в основном глобальные разделы реестра), без нарушения работы сервера.Это делает переработку пула приложений отличной альтернативой В большинстве случаев IISRESET.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top