Архив блога

Категории





Блоги

Разогрев рабочих процессов или устойчивая работа сайта с использованием IIS 7.5 Warm-Up

от Антон Бурцев в 18 августа 2010 г. 12:26

Проблема.

Вы сталкивались с тем, что при первом входе на сайт браузер замирает на несколько десятков секунд? Технология Warm-Up, появившаяся в IIS 7.5 позволяет решить эту проблему. Кроме того, с этой технологией можно перезапускать рабочие процессы в любой момент времени без влияния на время отклика сервера и доступность сайта. Рассмотрим две ситуации:
  1. Редко посещаемые сайты – приложение (или часть данных приложения) выгружается из памяти в связи с простоем и при поступлении запроса опять инициализируется.
  2. Высоконагруженные сайты – возникает необходимости принудительного перезапуска рабочего процесса (как правило, в связи со сбоями, утечками памяти, повисшими запросами и т.п.

Редко посещаемые сайты

В случае низкой посещаемости достаточно сделать две простые настройки:
  • Отключить выгрузку приложения в случае простоя
  • Отключить очистку кеша при простое.

Отключение тайм-аута простоя

Тут можно просто установить большой тайм-аут простоя для пула приложений.
Тайм-аут прорстоя 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» Скачать можно тут:
После установки данного приложения в IIS появляется новый инструмент
Дважды кликнув по иконке мы попадаем в список, где можно перечислить каким страницам нашего сайта нужно обратиться перед тем. как направлять запросы посетителей на поднимаемый рабочий процесс.
В большинстве случаев достаточно прогрузить главную страницу сайта и страницу входа.

Еще нужно указать, когда запускать процесс предварительного «разогрева» рабочего процесса:
Теперь можно смело настраивать частый перезапуск рабочих процессов не опасаясь, что в момент перезапуска сайт перестанет отвечать. Разумеется, следует иметь ввиду, что процедура перезагрузки ресурсоемка. Впрочем, в моих проектах ей можно пренебречь по сравнению с нагрузкой, создаваемой посетителями.

Автор
Антон Бурцев

Интернет-порталы на базе DotNetNuke: Пресса-Онлайн, Библио-Парк.
Проект XsltDb - разрабатывай для DotNetNuke с удовольствием!