Исправление медленной начальной загрузки для IIS

IIS имеет раздражающую функцию для веб-сайтов с низким трафиком, где он перерабатывает неиспользуемые рабочие процессы, в результате чего первый пользователь через некоторое время получает чрезвычайно долгую задержку (более 30 секунд).

искал решение проблемы и яМы нашли эти потенциальные решения.

A.Используйте плагин инициализации приложения

B.Использовать автозапуск с .NET 4

C.Отключить время простоя (в разделе IIS Reset)

D.Предварительно скомпилировать сайт

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

редактировать

Выполнение C Кажется, этого будет достаточно, чтобы мой сайт прогрелся, но яобнаружил, что настоящий корень моего сайтамедлительность связана с Entity Framework, что я могукажется, не понять, почему этостановится холодно. Увидетьэтот вопрос, которыйк сожалению не добралсяеще не ответили был дан ответ!

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

 qakmak24 мар. 2014 г., 20:03
Привет, друг, Достаточно ли исполняется C? Зачем ? Нужно ли использовать только его или нужно отключить переработанный тоже? Я всегда чувствую второй день первый запрос очень медленно IIS7.5

Ответы на вопрос(6)

спользование Microsoft Flow, которое бесплатно до 750 "работает» в месяц. Очень легко создать поток, который посещает ваш сайт каждый час, чтобы держать его в тепле. Вы даже можете обойти ограничение в 750, создав единый поток с задержками, разделяющими несколько посещений вашего сайта.

https://flow.microsoft.com

ю. Это включает в себя как проблемы производительности, связанные с запуском, в разделе "холодный запуск" раздел. Большая часть этого будет иметь значение независимо от того, какой тип сервера вы используете, локально или на производстве.

http://blogs.msdn.com/b/mcsuksoldev/archive/2011/01/19/common-performance-issues-on-asp-net-web-sites.aspx

Если приложение десериализует что-либо из XML (и это включает в себя веб-сервисы ...) убедитесь, что SGEN запущен для всех двоичных файлов, участвующих в десериализации, и поместите полученные DLL в глобальный кэш сборок (GAC). Это прекомпилирует все объекты сериализации, используемые сборками, с которыми был запущен SGEN, и кэширует их в результирующей DLL. Это может дать огромную экономию времени при первой десериализации (загрузке) файлов конфигурации с диска и при первоначальных обращениях к веб-сервисам.http://msdn.microsoft.com/en-us/library/bk3w6240(VS.80).aspx

Если какие-либо серверы IIS не имеют исходящего доступа к Интернету, отключите проверку списка отзыва сертификатов (CRL) для двоичных файлов Authenticode, добавив generatePublisherEvidence = ”ложный" в machine.config. В противном случае каждый рабочий процесс может зависнуть более чем на 20 секунд во время запуска, в то время как время ожидания истекает при попытке подключения к Интернету для получения списка CRL.http://blogs.msdn.com/amolravande/archive/2008/07/20/startup-performance-disable-the-generatepublisherevidence-property.aspx

http://msdn.microsoft.com/en-us/library/bb629393.aspx

Попробуйте использовать NGEN на всех сборках. Однако без осторожного использования это недает большую выгоду производительности. Это связано с тем, что адреса базовой загрузки всех двоичных файлов, загружаемых каждым процессом, должны быть тщательно установлены во время сборки, чтобы не перекрываться. Если двоичные файлы должны быть перебазированы при загрузке из-за столкновения адресов, почти все приросты производительности при использовании NGEN будут потеряны.http://msdn.microsoft.com/en-us/magazine/cc163610.aspx

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

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

 David Chelliah22 мая 2016 г., 00:10
только что обновил эту старую ветку на тот случай, если кто-то ищет то же самое

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

Решение Вопроса

B и D, похоже, относятся к одной и той же категории, поскольку они влияют только на начальное время запуска, они выполняют разогрев сайта, как компиляция и загрузка библиотек в память.

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

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

Помимо того, что пул приложений отключается в случае неактивности пользователя, пул приложений также перезапускается по умолчанию каждые 1740 минут (29 часов).

Из технета:

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

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

 Cavyn VonDeylen16 нояб. 2012 г., 21:39
Это неНа самом деле я не могу решить мою проблему (см. мои правки), но я согласился, так как вы ответили на мой первоначальный вопрос.
 Cavyn VonDeylen14 нояб. 2012 г., 21:22
Итак, вы бы порекомендовали просто отключить время простоя? Будет ли это вызвать проблемы вдоль линии (яЯ угадал этоесть причина)?

Вызов веб-хостинга

Вы должны помнить, что ни один из параметров конфигурации машины недоступен, если вы размещены на общем сервере, как многие из нас (небольшие компании и частные лица).

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, чтобы добавить библиотеку, которая будет извлекать вашу страницу.

ТАКЖЕ : убедитесь, что вы изменили переменную String URL, чтобы она указывала на URL, который будет загружать маршрут с вашего сайта ASP.NET MVC, чтобы механизм работал.

System.Timers.Timer webKeepAlive = new System.Timers.Timer();
Int64 counter = 0;
void Main()
{
    webKeepAlive.Interval = 5000;
    webKeepAlive.Elapsed += WebKeepAlive_Elapsed;
    webKeepAlive.Start();
}

private void WebKeepAlive_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    webKeepAlive.Stop();
    try
    {
        // ONLY the first time it retrieves the content it will print the string
        String finalHtml = GetWebContent();
        if (counter < 1)
        {
            Console.WriteLine(finalHtml);
        }
        counter++;
    }
    finally
    {
        webKeepAlive.Interval = 480000; // every 8 minutes
        webKeepAlive.Start();
    }
}

public String GetWebContent()
{
    try
    {
    String URL = "http://YOURURL.COM";
    WebRequest request = WebRequest.Create(URL);
    WebResponse response = request.GetResponse();
    Stream data = response.GetResponseStream();
    string html = String.Empty;
    using (StreamReader sr = new StreamReader(data))
    {
        html = sr.ReadToEnd();
    }
    Console.WriteLine (String.Format("{0} : success",DateTime.Now));
    return html;
    }
    catch (Exception ex)
    {
        Console.WriteLine (String.Format("{0} -- GetWebContent() : {1}",DateTime.Now,ex.Message));
        return "fail";
    }
}

Ваш ответ на вопрос