2011-01-30 3 views
2

Я не слишком ясно, о жизненном цикле IIS, но мое общее понимание:Почему IIS останавливается через некоторое время?

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

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

+0

Хорошие ответы уже есть. Одна вещь, о которой я до сих пор не понимаю, - почему IIS7 не полностью инициализирует себя, как только произойдет событие перезапуска. то есть. Почему мне нужно дождаться запроса веб-страницы для запуска моего пула, а не автоматического запуска сервера и gung-ho о получении клиентских веб-запросов? –

ответ

0

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

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

и

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

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

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

+0

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

3

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

5

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

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

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

Работник монитора Health settings обрабатывает и отключает их, если они терпят неудачу многократно и будут проверять, чтобы они запускались и останавливались в течение определенного времени.

2

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

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

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

Если вы используете встроенное состояние сеанса и сбрасываете проблемы, вы можете захотеть использовать SQL-based провайдер состояния сеанса.

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

Смежные вопросы