Почему IIS останавливается через некоторое время? - PullRequest
2 голосов
/ 30 января 2011

Мне не очень понятен жизненный цикл IIS, но мое общее понимание таково:

  1. Каждые несколько часов IIS сбрасывается.По-видимому, это делается для устранения утечек памяти, взаимных блокировок ресурсов и т. Д., Т. Е.Кажется, это операция очистки.
  2. Каждые пару часов (кажется, я прочитал 23 часа) сервер просто прекращает прослушивание входящих запросов и запускает Application_End.Внешний запрос страницы перезапустит приложение.

Могу ли я получить немного больше объяснений, почему происходит такое поведение?Особенно в отношении пункта № 2 ... Мой сервер выполняет внутреннее планирование, которое полностью умерло прошлой ночью.Причина состояла в том, что Application_End происходит, и не было никаких запросов клиентов для повторного запуска сервера IIS.Это кажется странным.Почему бы просто не устранить утечки памяти и т. Д., А затем поддерживать работу IIS точно такой, какой она была?Единственная причина, по которой я могу думать, это то, что он позволяет серверу восстанавливать память / процессор, используемый IIS, но это кажется бессмысленным и причиной ошибок, таких как моя проблема с планировщиком!

Ответы [ 4 ]

4 голосов
/ 30 января 2011

Каждый веб-сайт в IIS находится в пуле приложений, и у вас есть три различных раздела, которые влияют на то, когда пул приложений перезапускает свой рабочий процесс;Переработка, производительность и здоровье.Когда процесс перезапускается, сначала создается новый рабочий процесс (w3p.exe) для обработки любых новых запросов.Любые существующие запросы завершаются в старом процессе, а затем закрываются.Application_Start и Application_End будут запускаться в каждом процессе, чтобы вы могли соответствующим образом настроить и разорвать ресурсы.

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

Параметры производительности могут завершить рабочий процесс, если он не используется в течение указанного количества минут или если ЦП достигает указанного порогового значения.Вы также можете увеличить количество рабочих процессов для пула приложений и создать веб-сад.

Параметры работоспособности отслеживают рабочие процессы и отключают их, если они многократно отказывают, и проверят, чтоони запускаются и останавливаются в течение указанного времени.

4 голосов
/ 30 января 2011

Этим поведением можно управлять, изменив настройки корзины приложений на вашем веб-сайте.Наш производственный веб-сайт на работе перезаписывает свой пул каждую ночь в 3 часа ночи, но наша среда контроля качества перерабатывает несколько раз в день.

3 голосов
/ 30 января 2011

Технически IIS не останавливается и не сбрасывается.Это пул приложений, который перерабатывается, что гарантирует, что область приложений, в которой работают ваши веб-приложения, не сработает со временем из-за ошибок / неэффективности в вашем коде, ошибок в платформе и т. Д.Модель на самом деле очень хороша для здоровья долго работающего приложения.Службы Windows, например, не получают этих преимуществ.Если процесс падает, это сделано.Но поскольку IIS может измерять различные аспекты вашего веб-приложения, такие как время отклика, потребление памяти, неактивность и т. Д., Он может предложить сбросить ваше приложение при определенных обстоятельствах.Все они настраиваемы, но вы всегда должны стремиться разрабатывать веб-приложения таким образом, чтобы один запрос не зависел от предыдущего запроса.

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

Если вы используете состояние сеанса в процессе и сбросы вызывают проблемы,Вы можете рассмотреть возможность использования поставщика состояния сеанса на основе SQL.

В любом случае вы можете узнать больше о настройке поведения перезапуска пула приложений IIS 7 здесь.http://technet.microsoft.com/en-us/library/cc753179(WS.10).aspx

0 голосов
/ 30 января 2011

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

Почему бы просто не устранить утечки памяти и т. Д., А затемсохранить IIS работает точно так же, как это было?Единственная причина, по которой я могу думать, - это то, что он позволяет серверу восстанавливать память / процессор, используемый IIS, но это кажется бессмысленным и причиной ошибок, таких как проблема с моим планировщиком!

и

Почему мне нужно дождаться запроса веб-страницы, чтобы запустить мой пул, а не автоматически запускать сервер и неохотно получать клиентские веб-запросы?

ДавайтеПодумайте о следующем сценарии и о том, что произойдет, если IIS будет вести себя таким образом.Если у нас есть машина, на которой размещено несколько тысяч веб-сайтов (т. Е. Типичная среда общего хостинга), на каждом веб-сайте есть собственный пул приложений (w3p.exe).Предположим, что IIS запускает рабочий пул для каждого веб-сайта, независимо от того, был ли сделан запрос на этот сайт, у вас будет несколько тысяч процессов, запускаемых одновременно, каждый из которых работает на холостом ходу, скажем, 2 МБ ОЗУ.Если у вас есть 2000 веб-сайтов, вы просто выделили 4 ГБ оперативной памяти и практически ничего не делаете, и ОС может начать загружать файл подкачки без особой необходимости.

Желательно ли это?Я думаю, вы согласитесь, что ответ - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...