У IIS есть раздражающая функция для веб-сайтов с низким трафиком, где он перерабатывает неиспользуемые рабочие процессы, в результате чего первый пользователь на сайте через некоторое время получает чрезвычайно долгую задержку (30+ секунд).
Я искал решение проблемы и нашел эти потенциальные решения.
A. Используйте плагин инициализации приложения
Б. Использование автозапуска с .NET 4
C. Отключите тайм-аут простоя (в разделе «Сброс IIS»)
D. Предварительно скомпилируйте сайт
Мне интересно, какое из них предпочтительнее, и, что более важно, почему существует так много решений одной и той же проблемы? (Я предполагаю, что это не так, и я просто что-то неправильно понимаю).
редактировать
Выполнения C кажется достаточно, чтобы поддерживать мой сайт в горячем состоянии, но я обнаружил, что настоящая причина медлительности моего сайта связана с Entity Framework, и я не могу понять, почему он становится холодным. См. Этот вопрос, на который, к сожалению, еще нет ответа!
В конце концов мне просто пришлось создать сценарий разогрева, чтобы время от времени заходить на мой сайт, чтобы убедиться, что он работает быстро.
Ответы:
Параметры A, B и D, похоже, относятся к одной категории, поскольку они влияют только на начальное время запуска, они разогревают веб-сайт, например, компиляцию и загрузку библиотек в память.
Использование C с установкой тайм-аута простоя должно быть достаточным, чтобы последующие запросы к серверу обслуживались быстро (перезапуск пула приложений занимает довольно много времени - порядка секунд).
Насколько мне известно, тайм-аут существует для экономии памяти, которая может понадобиться другим веб-сайтам, работающим параллельно на этой машине. Цена заключается в том, что один раз медленная загрузка.
Помимо того факта, что пул приложений отключается в случае неактивности пользователя, пул приложений также будет перезапускаться по умолчанию каждые 1740 минут (29 часов).
Из technet:
Пока повторное использование пула приложений включено, этого должно быть достаточно. Но если вам действительно нужна высочайшая производительность для большинства компонентов, вам также следует использовать что-то вроде упомянутого вами модуля инициализации приложения.
источник
Задача веб-хостинга
Вы должны помнить, что ни один из вариантов конфигурации машины недоступен, если вы размещены на общем сервере, как многие из нас (небольшие компании и частные лица).
Накладные расходы ASP.NET MVC
Мой сайт занимает не менее 30 секунд, если на него не обращались более 20 минут (и веб-приложение было остановлено). Это ужасно.
Еще один способ проверить производительность
Есть еще один способ проверить, запускается ли это ваш ASP.NET MVC или что-то еще. Перетащите обычную HTML-страницу на свой сайт, где вы можете напрямую перейти к ней.
Если проблема связана с запуском ASP.NET MVC, HTML-страница будет отображаться почти сразу, даже если веб-приложение не было запущено.
Вот так я впервые понял, что проблема была в запуске ASP.NET MVC. Я загружал HTML-страницу в любое время, и она загружалась молниеносно. Затем, открыв эту HTML-страницу, я попадал по одному из своих URL-адресов ASP.NET MVC и получал сообщение Chrome «Ожидание raddev.us ...»
Еще один тест с помощью полезного сценария
После этого я написал сценарий LINQPad ( подробнее см. Http://linqpad.net ), который будет попадать на мой веб-сайт каждые 8 минут (меньше, чем время для выгрузки приложения - которое должно быть 20 минут), и я позволил он работает часами.
Пока работал скрипт, я заходил на свой веб-сайт, и каждый раз мой сайт открывался невероятно быстро. Это дает мне хорошее представление о том, что, скорее всего, я столкнулся с медлительностью из-за времени запуска ASP.NET MVC.
Получите LinqPad, и вы сможете запустить следующий сценарий - просто измените URL-адрес на свой собственный и дайте ему запуститься, и вы легко сможете это проверить. Удачи.
ПРИМЕЧАНИЕ . В LinqPad вам нужно будет нажать F4 и добавить ссылку на System.Net, чтобы добавить библиотеку, которая будет получать вашу страницу.
ТАКЖЕ : убедитесь, что вы изменили переменную URL-адреса String, чтобы она указывала на URL-адрес, который будет загружать маршрут с вашего сайта ASP.NET MVC, чтобы двигатель работал.
источник
Написание службы / скрипта ping для перехода на ваш неактивный веб-сайт - лучший способ, потому что у вас будет полный контроль. Другие варианты, о которых вы упомянули, будут доступны, если вы арендовали выделенный хостинг.
В пространстве общего хостинга сценарии разминки - лучшая защита первого уровня (лучшая помощь - самопомощь). Вот статья, в которой рассказывается, как это сделать из вашего собственного веб-приложения .
источник
Я бы использовал B, потому что это в сочетании с перезапуском рабочего процесса означает, что на его переработку будет только задержка. Это позволяет избежать задержки, обычно связанной с инициализацией в ответ на первый запрос после простоя. Вы также сохраняете преимущества вторичной переработки.
источник
Хороший вариант проверки связи с сайтом по расписанию - использовать Microsoft Flow, который предоставляется бесплатно до 750 запусков в месяц. Очень легко создать поток, который будет попадать на ваш сайт каждый час, чтобы поддерживать его в тепле. Вы даже можете обойти их ограничение в 750, создав единый поток с задержками, разделяющими несколько обращений к вашему сайту.
https://flow.microsoft.com
источник
В этой статье вы найдете советы, как решить проблемы с производительностью. Сюда входят обе проблемы производительности, связанные с запуском, в разделе «холодный запуск». По большей части это будет иметь значение, независимо от того, какой тип сервера вы используете, локальный или производственный.
https://blogs.msdn.microsoft.com/b/mcsuksoldev/2011/01/19/common-performance-issues-on-asp-net-web-sites/
источник
Я получал постоянную 15-секундную задержку при первом запросе после 4 минут бездействия. Моя проблема заключалась в том, что мое приложение использовало встроенную проверку подлинности Windows для SQL Server, а профиль службы находился в другом домене, чем сервер. Это вызвало междоменную аутентификацию с IIS на SQL при инициализации приложения - и это было настоящим источником моей задержки. Я перешел на использование входа в систему SQL вместо аутентификации Windows. Задержка сразу исчезла. У меня все еще есть все настройки инициализации приложения, которые помогают повысить производительность, но в моем случае они, возможно, вообще не понадобились.
источник