Ответ 1
Я обнаружил, что была сетевая задержка, начальная связь с веб-сервером на сервере базы данных.
Проблема была характерна для Windows 2008 и нашего конкретного сетевого оборудования.
Разрешение было отключить следующие веб-серверы:
У меня есть веб-сайт ASP.NET 3.5, работающий под IIS7 в Windows 2008.
Когда я перезапускаю IIS (iisreset), а затем нажимаю страницу, начальный запуск происходит очень медленно.
В Process Explorer я вижу следующее действие:
В течение этого времени я не вижу никаких других процессов, использующих CPU. Это в основном просто зависает.
Что происходит в течение всего этого времени? Как я могу отслеживать, что происходит все это время?
Я обнаружил, что была сетевая задержка, начальная связь с веб-сервером на сервере базы данных.
Проблема была характерна для 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 промежуточный язык (MSIL) - используемый перевод как результат ряда компиляторы. Это вклад в компилятор "точно в срок" (JIT). Common Language Runtime включает JIT компилятор для преобразования MSIL в собственный код.
До Microsoft Intermediate Language (MSIL) может быть выполнена, он должен быть преобразованный .NET Framework компилятор "точно в срок" (JIT) код. Это код, специфичный для процессора, который работает на одной компьютерной архитектуре как JIT-компилятор. Вместо использования времени и памяти для преобразования всех MSIL в переносном исполняемом файле (PE) файл на собственный код. Он преобразует MSIL по мере необходимости во время выполнения, затем кэширует полученный его доступным для любого последующего вызовы.
Это компиляция страниц asp.Net на промежуточном языке + компиляция JIT - это происходит только при первой загрузке страницы. (См. http://msdn.microsoft.com/en-us/library/ms366723.aspx)
Если это вас действительно беспокоит, вы можете остановить его из-за предварительной компиляции вашего сайта.
РЕДАКТИРОВАТЬ: Просто перечитайте вопрос - 60 секунд очень длинны, и вы ожидаете увидеть некоторую активность процессора за это время. Проверьте EventLog на наличие ошибок/сообщений в назначениях системы и приложения. Также попробуйте создать аварийный дамп процесса w3wp за эти 60 секунд - есть шанс, что вы сможете узнать, что он делает, глядя на некоторые из стеков вызовов.
Если он принимает ровно 60 секунд каждый раз, то вероятность того, что его ждет что-то в тайм-аут - 60 секунд - это хороший круглый номер. Убедитесь, что он имеет правильные подключения к контроллерам домена и т.д.
(Если есть некоторые диагностические инструменты IIS, которые бы сделали лучшую работу, то я боюсь, что я не знаю о них, этот вопрос может быть больше подходит для ServerFault, выше - это гораздо более основанный на разработчике подход к устранение неполадок: -p)
Более 60 секунд звучит подозрительно. Попробуйте запустить страницу test.html, чтобы узнать, сколько времени потребуется. Это изолирует роль IIS7.
Затем временно переименуйте папки web.config, global.asax и приложения и попробуйте страницу test.aspx(очень простая страница). Это изолирует ASP.NET.
Если оба из них быстры (т.е. около 10 секунд), то это ваше приложение. Но, если они медленны, то не приложение и что-то с самим сервером.
Эта шляпа не связана с компиляцией JIT. Обычный компилятор С# компилирует ваш код за файлами (.aspx.cs) на промежуточный язык в сборку при запуске, если эта сборка не существует или файлы кода были изменены. Ваша сборка веб-сайта находится в папке "bin" вашего веб-сайта.
Фактически после этого происходит компиляция JIT, но это очень быстро и не займет нескольких минут. Компиляция JIT происходит при каждом запуске приложения .net, и это займет не более нескольких секунд.
Вы можете избежать копания вашего веб-сайта, если вы разворачиваете уже собранную сборку веб-сайта (YourWebsite.dll) в папку bin. Также возможно развернуть только файлы aspx и оставить код за файлами (aspx.cs).