Распространенные причины, по которым пул приложений может неожиданно перезапуститься
РЕДАКТИРОВАТЬ : полный текст в случае перехода по ссылке 404:
Если ваше приложение аварийно завершает работу, зависает и заходит в тупик, это вызывает / требует перезапуска пула приложений для его разрешения, но иногда пул приложений необъяснимым образом перезагружается без видимой причины. Обычно это проблема конфигурации или из-за того, что вы выполняете операции файловой системы в каталоге приложения.
Ради исключения я подумал, что перечислю наиболее распространенные причины.
Настройки пула приложений
Если вы проверите свойства пула приложений, вы увидите ряд параметров для повторного использования пула приложений. В IIS6 они:
Перезапуск рабочих процессов (в минутах)
Перезапуск рабочего процесса (в запросах)
Перезапуск рабочих процессов в следующие моменты
Максимальная виртуальная память
Максимально используемая память
Эти настройки должны быть понятны, но если вы хотите узнать больше, ознакомьтесь с этой статьей MSDN
Элемент processModel файла machine.config
Если вы используете IIS5 или режим изоляции IIS5, вам нужно взглянуть на элемент processModel. Свойства, на которые следует обратить самое пристальное внимание:
MemoryLimit
requestLimit
Тайм-аут
MemoryLimit
Значение по умолчанию memoryLimit равно 60. Это значение представляет интерес, только если у вас достаточно мало памяти на 32-битной машине. 60 означает 60% общей системной памяти. Таким образом, если у вас есть 1 ГБ памяти, рабочий процесс автоматически перезапустится, как только он достигнет 600 МБ. С другой стороны, если у вас есть 8 ГБ, теоретически процесс перезапустится, когда он достигнет 4,8 ГБ, но, поскольку это 32-разрядный процесс, он никогда не станет таким большим. См. Мой пост о 32-битных процессах для получения дополнительной информации.
requestLimit
По умолчанию этот параметр является «бесконечным», но если он установлен, например, на 5000, ASP.NET запустит новый рабочий процесс, как только будет обработано 5000 запросов.
таймаут
Время ожидания по умолчанию - «бесконечно», но здесь вы можете установить время жизни рабочего процесса. По истечении времени ожидания ASP.NET запустит новый рабочий процесс, поэтому при установке значения «00:05:00» приложение будет перезапускаться каждые пять минут.
Другие свойства
В элементе processModel есть другие свойства, которые приведут к перезагрузке пула приложений, например responseDeadlockInterval. Но эти другие настройки обычно зависят от того, что что-то идет не так или не в порядке. Если у вас тупик, то это ваше главное беспокойство. Изменение параметра responseDeadlockInterval не очень поможет разрешить ситуацию. Вам нужно разобраться с самим тупиком.
Редактирование и обновление
ASP.NET 2.0 зависит от уведомлений об изменении файлов (FCN), чтобы увидеть, было ли приложение обновлено. В зависимости от изменений пул приложений будет перезагружен. Если вы или ваше приложение добавляете и удаляете каталоги в папке приложения, вы будете каждый раз перезапускать пул приложений, поэтому будьте осторожны с этими временными файлами.
Изменение следующих файлов также приведет к немедленному перезапуску пула приложений:
web.config
machine.config
global.asax
Все в каталоге bin или его подкаталогах
Обновление файлов .aspx и т. Д., Вызывающее перекомпиляцию, в конечном итоге также приведет к перезапуску пула приложений. В system.web есть свойство элемента компиляции, которое называется numRecompilesBeforeAppRestart. Значение по умолчанию равно 20. Это означает, что после 20 перекомпиляций пул приложений будет перезагружен.
Обходной путь к проблеме подкаталога Если ваше приложение действительно зависит от добавления и удаления подкаталогов, вы можете использовать linkd для создания соединения каталогов.Вот как:
Создайте каталог, который вы хотите исключить из FCN, например, c: \ inetpub \ wwwroot \ WebApp \ MyDir Создайте отдельную папку где-нибудь за пределами wwwroot.Например, c: \ MyExcludedDir использовать linkd для связи двух: linkd c: \ inetpub \ wwwroot \ WebApp \ MyDcludedD: MyExcludedDir Любые изменения, сделанные в c: \ inetpub \ wwwroot \ WebApp \ MyDir, фактически будут происходить в c: \ MyExcludedDirпоэтому они останутся незамеченными со стороны FCN.
Неужели утилизация пула приложений действительно так плоха? Вам действительно не нужно перерабатывать пул приложений, но если вы сталкиваетесь с утечкой памяти в вашем приложении и вам необходимо купитьПришло время исправить это, тогда хорошей идеей может быть утилизация пула приложений.
А как насчет состояния сеанса? Что ж, если вы запускаете состояние сеанса в процессе, то, очевидно, оно будет сбрасываться каждый раз при повторном использовании пула приложений.Если вам нужно освежить настройки своего сервера состояний, я рекомендую взглянуть на эту запись.