Проблема.
Вы сталкивались с тем, что при первом входе на сайт браузер замирает на несколько десятков секунд? Технология Warm-Up, появившаяся в IIS 7.5 позволяет решить эту проблему. Кроме того, с этой технологией можно перезапускать рабочие процессы в любой момент времени без влияния на время отклика сервера и доступность сайта. Рассмотрим две ситуации:
-
Редко посещаемые сайты – приложение (или часть данных приложения) выгружается из памяти в связи с простоем и при поступлении запроса опять инициализируется.
-
Высоконагруженные сайты – возникает необходимости принудительного перезапуска рабочего процесса (как правило, в связи со сбоями, утечками памяти, повисшими запросами и т.п.
Редко посещаемые сайты
В случае низкой посещаемости достаточно сделать две простые настройки:
- Отключить выгрузку приложения в случае простоя
- Отключить очистку кеша при простое.
Отключение тайм-аута простоя
Тут можно просто установить большой тайм-аут простоя для пула приложений.
Тайм-аут прорстоя
10000 минут означает, что пул приложений не будет выгружаться при простоях до 20 дней.
Настройка кеша
В конфигурационном файле приложения web.config нужно добавить секцию
configuration/system.web/caching/cache
и указать следующие параметры:
caching
>
cache
disableMemoryCollection
=
"true"
disableExpiration
=
"true"
privateBytesLimit
=
"1073741824"
percentagePhysicalMemoryUsedLimit
=
"100"
privateBytesPollTime
=
"20:00:00"
/>
caching
>
Такая настройка предотвратит выгрузку кеша.
В случае нормальной работы сервера и IIS, отсутствия ошибок в ядре и модулях DNN эти две настройки позволят обеспечить быстрый ответ в любое время при любых простоях сервера. Однако, этого может оказаться недостаточно! Рабочие процессы могут перезапускаться по разным причинам, в том числе по причине сбоя. И после перезапуска рабочий процесс остается «недоинициализированным» до первого обращения. В этом случае, а так же в случае высоконагруженных систем нужно применять технологию
Warm-Up, описанную ниже. Это позволит при неожиданных перезапусках рабочих процессов обеспечить автоматическую и полную инициализацию нового рабочего процесса.
Высоконагруженные сайты.
Тут ситуация другая. Если сайт интенсивно развивается, а функционал дорабатывается, то он может содержать много ошибок, которые будут приводить проблемам в работе сайта. Наиболее распространенные ошибки таковы:
-
Утечка памяти. На каждом запросе к серверу в рабочий процесс выделяет дополнительные 2-3 килобайта памяти. Через некоторое время память в системе закончится.
-
Бесконечные циклы. В результате ошибок в коде сайта могут образовываться бесконечные циклы. Несколько (по количеству процессоров и ядер) таких запросов и сайт «завален».
-
Повисание незавершенных и отключенных запросов. Это приводит не столько к утечке памяти, сколько к лишним действиям сервера и если таких запросов накопится десяток тысяч, то сайт начнет заметно «тормозить».
В общем, ситуация такова, что нам время от времени нужно принудительно перезапускать рабочие процессы, чтобы избавиться от накопившегося «хлама». При этом нужно избежать того, чтобы запросы посетителей попадали в рабочий процесс, который еще не полностью инициализировался и не способен быстро обрабатывать запросы. Для этого в IIS 7.5 существует инструмент «Application Warm-Up» Скачать можно тут:
-
http://www.iis.net/download/applicationwarmup
После установки данного приложения в IIS появляется новый инструмент
Дважды кликнув по иконке мы попадаем в список, где можно перечислить каким страницам нашего сайта нужно обратиться перед тем. как направлять запросы посетителей на поднимаемый рабочий процесс.
В большинстве случаев достаточно прогрузить главную страницу сайта и страницу входа.
Еще нужно указать, когда запускать процесс предварительного «разогрева» рабочего процесса:
Теперь можно смело настраивать частый перезапуск рабочих процессов не опасаясь, что в момент перезапуска сайт перестанет отвечать. Разумеется, следует иметь ввиду, что процедура перезагрузки ресурсоемка. Впрочем, в моих проектах ей можно пренебречь по сравнению с нагрузкой, создаваемой посетителями.