Публикационный проект ASP.net запускается медленно

У меня есть довольно большой веб-сайт (~ 75 000 LoC), на Azure развернуты две машины D2 v2 (7 ГБ ОЗУ, 2 VCPU).

Когда я делаю новую сборку, я наблюдаю:

  • 1 из процессоров переходит на 100%
  • Это длится до двух минут
  • Затем Application_Start увольняют

Я пытаюсь сократить время с момента публикации до момента увольнения Application_Start, так как мы публикуем регулярно, и это причиняет некоторую боль посетителям сайта.

Издание сайта состоит из:

  • Публикация в папку (методFile System публикации)
  • Конфигурация Release
  • Удалить все существующие файлы отмеченные
  • Предварительная компиляция во время публикации проверена
  • Исключить файлы из папки App_Data отмечено
  • В расширенных настройках прекомпиляции ничего не проверяется и не выбирается, кроме Do not merge в параметрах слияния.
  • Заархивируйте опубликованную папку, загрузите на виртуальную машину и разархивируйте, перезаписав существующие файлы (занимает всего несколько секунд)

Мой вопрос:

  • Начальная задержка находится в пределах нормы, или я могу что-то сделать, чтобы измерить то, что она делает?
  • Есть ли какие-либо настройки, которые я могу изменить, чтобы улучшить время достижения события Application_Start?

person Tom Gullen    schedule 20.08.2019    source источник


Ответы (1)


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

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

person SamaraSoucy    schedule 24.08.2019
comment
Спасибо за это, возможно ли распределить нагрузку сборки по нескольким запросам, а не по начальному запросу? - person Tom Gullen; 27.08.2019
comment
Дело не в том, что первый запрос берет на себя нагрузку запуска, а в том, что первый запрос запускает процесс запуска. Я работаю в основном со службами приложений, где это единственный вариант. Я провел небольшое исследование, и похоже, что есть метод конфигурации, который вы можете установить в IIS для этого, поскольку вы находитесь на виртуальной машине: red-gate.com/simple-talk/blogs/ Сойдет то же самое, что отправить запрос сразу после развертывания, а именно заставить IIS немедленно запустить процесс запуска. - person SamaraSoucy; 27.08.2019