Приложение ASP.NET в IIS7 – очень медленный запуск после iisreset

StackOverflow https://stackoverflow.com/questions/1441601

Вопрос

У меня есть веб-сайт ASP.NET 3.5, работающий под управлением IIS7 в Windows 2008.

Когда я перезапускаю IIS (iisreset), а затем открываю страницу, первоначальный запуск происходит очень медленно.

Я вижу следующую активность в Process Explorer:

  • W3WP.Exe Spawns, но показывает 0% активности процессора в течение около 60 секунд
  • Наконец, W3WP.Exe переходит к 50% процессору в течение примерно 5 секунд, а затем страница загружается.

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

Что происходит все это время?Как я могу отследить, что занимает все это время?

Это было полезно?

Решение 4

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

Проблема была характерна для Windows 2008 и нашего конкретного сетевого оборудования.

Решением было отключить на веб-серверах следующее:

Другие советы

У нас была аналогичная проблема, и выяснилось, что Windows истекает время проверки отзыва сертификатов подписи.Проверьте, не пытается ли ваш сервер куда-то позвонить (например,crl.microsoft.com).Возможно у вас неправильные настройки прокси?Или фаерволл мешает?В конечном итоге мы решили, что имеем достаточный контроль над сервером и не хотим «звонить домой», поэтому просто отключили проверку.Вы можете сделать это с помощью .NET 2.0 SP1 и более поздних версий, добавив следующее в файл Machine.config.

<runtime> <generatePublisherEvidence enabled="false"/> </runtime>

Я не уверен, что вы можете просто поместить это в свой app.config/web.config.

IL преобразуется в машинный код (Ассемблер) с помощью компилятора Just-In-Time, и вам придется ждать, пока произойдет вся магия.

При составлении исходного кода в управляемый код компилятор переводит источник на промежуточный язык Microsoft (MSIL).Это не независимый от процессора набора инструкций, который может эффективно преобразовать в собственный код.Microsoft Intermediate Language (MSIL) - это перевод, используемый в качестве вывода ряда компиляторов.Это вход для просто в срок (JIT) компилятора.Обычное время выполнения языка включает в себя компилятор JIT для преобразования MSIL в собственный код.

Перед тем, как Microsoft Intermediate Language (MSIL) может быть выполнен, должен быть преобразован с помощью компилятора .NET Framework Just-In-Time (JIT) в собственный код.Это код, специфичный для процессора, который работает на той же компьютерной архитектуре, что и компилятор JIT.Вместо того, чтобы использовать время и память, чтобы преобразовать все MSIL в портативном исполняемом (PE) файле в собственный код.Он преобразует MSIL по мере необходимости во время выполнения, а затем кэширует полученный собственный код, чтобы он был доступен для любых последующих вызовов.

источник

Это компиляция страниц asp.Net в промежуточный язык + JIT-компиляция - это происходит только при первой загрузке страницы.(Видеть http://msdn.microsoft.com/en-us/library/ms366723.aspx)

Если это вас действительно беспокоит, вы можете предотвратить это, предварительно скомпилировав свой сайт.

РЕДАКТИРОВАТЬ: Просто перечитайте вопрос: 60 секунд — это очень долго, и в течение этого времени вы ожидаете увидеть некоторую активность процессора.Проверьте журнал событий на наличие ошибок/сообщений в пунктах назначения «Система» и «Приложение».Также попробуйте создать аварийный дамп процесса w3wp в течение этих 60 секунд — есть шанс, что вы сможете узнать, что он делает, просмотрев некоторые стеки вызовов.

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

(Если есть какие-то инструменты диагностики IIS, которые справятся с этой задачей лучше, то, боюсь, я о них не знаю, этот вопрос может больше подходить для ServerFault, вышеописанный подход к устранению неполадок гораздо более ориентирован на разработчиков: - п)

Более 60 секунд звучит подозрительно.Попробуйте запустить страницу test.html и посмотрите, сколько времени это займет.Это изолирует роль IIS7.

Затем временно переименуйте папки web.config, global.asax и application и попробуйте страницу test.aspx (очень простая страница).Это изолирует ASP.NET.

Если оба из них быстрые (т.е.около 10 секунд), тогда это ваше приложение.Но если что-то медленное, то не приложение, а что-то с самим сервером.

Эта шляпа не имеет ничего общего с JIT-компиляцией.Обычный компилятор C# компилирует код файлов (.aspx.cs) в промежуточный язык в сборку при запуске, если эта сборка не существует или файлы кода изменились.Сборка вашего веб-сайта находится в папке «bin» вашего веб-сайта.

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

Вы можете избежать компиляции вашего веб-сайта, если развернете уже скомпилированную сборку веб-сайта (YourWebsite.dll) в папке bin.Также можно развернуть только файлы aspx и оставить код файлов (aspx.cs) отдельно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top