Назад | Перейти на главную страницу

Большая задержка на виртуальных хостах Windows / IIS

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

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

Настройка очень традиционна. Аппаратный сервер (не виртуальная машина) с одним процессором и 16 ГБ оперативной памяти. Ему около двух лет, и он работает под управлением Windows 2012, SQL 2012 и IIS 8. Каждый из виртуальных сайтов представляет собой веб-приложение на базе SQL-сервера в ASP.NET/C# с ​​SSL.

Ссылки ниже иллюстрируют задержку.

Это происходит при первом открытии одного из сайтов:

После входа в систему сохраняется недопустимая задержка при перемещении между страницами:


Если я позволю сеансу истечь (около 10 минут) и снова зарегистрируюсь на том же сайте:

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

Можем ли мы что-нибудь сделать, за исключением вставки операторов debug-print в какой-либо файл журнала, чтобы понять, почему возникают эти длительные задержки? Кажется, что IIS не обновляет свой журнал сразу, поэтому я даже не знаю, как проверить, когда IIS получает запрос.

Мы, конечно, проверили из разных мест, чтобы устранить проблему с сетью от одного клиентского ПК до сервера.

Спасибо!

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

.NET / ASP.NET не был разработан для быстрого запуска. Он многое делает при запуске. Вы можете принудительно запустить ручной запуск перед началом тестирования, что позволит исключить это время из ваших измерений.

Если что-то пойдет не так - приступайте к работе базового программиста. Т.е. подключите инструмент профилирования на стороне сервера или интегрируйте Glimpse в свое приложение. Это позволит вам ориентироваться, например, на медленные SQL-запросы (и они часто являются главной причиной - люди злоупотребляют базой данных). Если это не SQL - профайлер действительно нужен.

Но то, что вы описываете, в первую очередь звучит как стандартное время запуска приложения asp.net.