Назад | Перейти на главную страницу

Как оптимизировать разогрев IIS на серверах с большим количеством сайтов? (Например, поэтапная разминка.)

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

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

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

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

Предоставляет ли IIS поэтапную разминку при запуске IIS?

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

Видеть Инициализация приложения IIS 8.0 о том, как настроить предварительную загрузку приложений.

РЕДАКТИРОВАТЬ: для разминки после система перезапуск, предварительная компиляция по-прежнему настоятельно рекомендуется, но есть другой вариант конфигурации для запуска всех сайтов перед первым запросом (см. ссылку ниже). В IIS 8 вы все равно можете захотеть выполнить запуск на уровне приложения (он будет попадать на определенные страницы, что позволяет подогревать кеши и загружать динамические зависимости без необходимости делать это вручную в вашем Application_Start. Этот тип перезапуска должен выполняться во время непиковой нагрузки, и несколько серверов с балансировщиком нагрузки, как правило, позволяют избежать воздействия на пользователей задержки прогрева. Вам не нужно слишком дорого обходиться с аппаратным балансировщиком нагрузки, балансировщик нагрузки, встроенный в Windows отлично подходит для небольших магазинов. Когда вы собираетесь начать обслуживание, вы истощаете сервер, который собираетесь перезапустить, ожидаете завершения запросов (столько, сколько хотите), выполняете обслуживание и затем перезапускаете сервер в балансировщике нагрузки, затем повторяете для другой сервер. Если ваш трафик таков, что его широковещательная передача по сети является проблемой, вам может потребоваться отдельная выделенная подсеть для веб-серверов или маршрутизатора, который обрабатывает ICMP.

Видеть Настройка автоматического запуска для пула приложений (IIS 7) о том, как настроить автоматический запуск приложения после перезагрузки системы.

Еще одна вещь, которую следует учитывать, - это проверить в файле web.config на каждом сайте, установлен ли для атрибута элемента компиляции "batch" значение true. Документы MSDN

Это дает указание asp.net скомпилировать все страницы на ваших сайтах одновременно (в пакетном режиме), что может быть очень медленным. Если вы установите для него значение false, только страницы, которые получают запросы, будут компилироваться, но только один раз. (в дополнение к предварительной компиляции всего в / app_code). Таким образом, вы обмениваете большой предварительный процесс компиляции группы страниц на группе сайтов на случайную разовую компиляцию страниц, которые запрашиваются в течение дня. Это значительно сокращает время запуска.

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