Почему рабочий процесс IIS перезапускается каждые 29 часов, а не каждые 24 часа?

24

При настройке сайта в IIS рабочий процесс по умолчанию перезапускается каждые 1740 минут (29 часов). Почему нечетное число, например, 29 часов, а не, например, 24 или 48 часов?

парень
источник

Ответы:

27

На Tech Ed 2003 докладчику был задан этот вопрос, и ответ состоял в том, что он хотел, чтобы нерегулярный цикл не происходил на ежедневной границе (например, чтобы отличить его от других ежедневных задач, запланированных на сервере / домене).

На сайте здесь (ссылка мертвая) рассуждают:

... (29 - это) первое простое число после 24, что позволяет ему иметь наименьший шанс на то, чтобы происходить в обычном порядке с любым другим серверным процессом; облегчение расследования проблем

Другой сайт, кажется, подтверждает это:

( Уэйд Хилмо ) предложил 29 часов по той простой причине, что это наименьшее простое число за 24 года. Он хотел, чтобы ступенчатый и неповторяющийся шаблон встречался не чаще, чем раз в день.

StuartLC
источник
Интересный. Лично я считаю, что повторение чего-либо в одно и то же время каждый день облегчит отслеживание, если перезапуск рабочего процесса вызывает другие проблемы. например, отследить проблему, которая происходит примерно каждый день, сложно, но легче, если это происходит в 7 вечера каждый день, потому что вы можете искать в системе события, которые происходят в это время. Я знаю, что вы можете настроить IIS на перезапуск, когда захотите или нет, но большинство оставит его по умолчанию. Спасибо за ответ!
Парень
18

ОК, это меня беспокоило, поэтому я покопался и, наконец, нашел это сообщение от парня, который, очевидно, был в команде IIS:

Причина, по которой IIS6 перезапускается каждые 29 часов по умолчанию (и у нас была причина

Причина, по которой IIS6 перезапускается каждые 29 часов по умолчанию (и у нас была причина выбрать 29 часов в качестве значения по умолчанию), заключается в том, что скорее всего веб-приложение, работающее на нем, ненадежно и буквально нуждается в частом перезапуске.

Таким образом, IIS6 построен на предположении (предположительно циничном), что веб-приложение пользователя не будет работать более 24 часов подряд, функции планируются соответствующим образом и выбираются значения по умолчанию. Рабочие процессы перезагружаются каждые 29 часов, отслеживаются запуск и завершение процесса, процесс постоянно проверяется, чтобы убедиться, что он запущен, дескриптор процесса отслеживается и сигнализируется, когда он неожиданно завершается, и т. Д. И т. Д.

Понимая, что переработка является нормальной частью операций, IIS6 также обеспечивает изоляцию такой пересылки от конечного пользователя - TCP-соединение конечного пользователя никогда не прерывается во время перезапуска из-за некоторой магии режима ядра. В сочетании с приложением пользовательского режима, которое хранит состояние сеанса вне процесса (например, ASP.Net Session State Service), практически гарантируется надежное время безотказной работы без потери данных, видимой для пользователя, даже если веб-приложение аварийно завершает работу после каждой обработки запрос пользователя.

Это настолько хорошо, насколько IIS6 может это сделать - учитывая ненадежное веб-приложение, сделать его надежным для конечного пользователя и делать это без необходимости исправления ненадежного веб-приложения.

Конечно, не все ненадежные приложения могут выглядеть надежными - если это так, то у нас все без работы! - но IIS6, конечно, гораздо больше пытается быть устойчивым.

В вашем случае, просто случается так, что устойчивость оказывает побочный эффект на непостоянное пользовательское состояние, но его можно легко отрегулировать.

Предполагая, что ваше веб-приложение никогда не имеет проблем и остается в состоянии сеанса в процессе, вы можете изменить следующие значения по умолчанию: 1. Отключите 29-часовой периодический повторный пуск 2. Отключите 20-минутный тайм-аут

Это предотвратит неожиданную потерю состояния сеанса.

Конечно, если вы когда-либо используете приложение с состоянием сеанса вне процесса, вы можете оставить все как значения по умолчанию и никогда не замечать различий в функциональности или надежности.

ДОК
источник
1
Я чувствую себя глупо, спрашивая об этом, но если IIS предполагает, что веб-приложение не работает до 24 часов, почему 29 был хорошим выбором? Разве они не выбрали число ниже 24? Где я не прав в интерпретации этого объяснения?
Альфа
Возможно, не существует «лучшего» ответа для значения по умолчанию, и лицо, администрирующее веб-сайт, должно принять осознанное решение в зависимости от приложения и системы.
DOK
@ Альфа - я согласен - это не имеет смысла - по умолчанию должно быть 22 или 23 часа или, по крайней мере, что-то ниже 24.
Парень
[нужная цитата]
piers7
Каждое утро я получаю странную ошибку компиляции на некоторых частях сайта, которая может быть исправлена ​​только с помощью корзины. Я предполагаю, что Idle Timeout запускается ночью из-за низкой нагрузки, и по какой-то причине, когда он запускается снова, ошибка компиляции возвращается. Спасибо за руководство, я буду следовать по этому пути, чтобы исправить мою проблему ...
sonjz