Загрузка страницы с перерывами занимает 2 минуты - PullRequest
0 голосов
/ 07 декабря 2009

Мы готовимся переключить наше приложение ASP.Net на новую среду веб-фермы. Однако наше тестирование выявило периодически возникающую проблему, из-за которой страница занимает до 2 минут, чтобы завершить загрузку, где обычно это занимает менее 2 секунд. Инструменты диагностики браузера (такие как Firebug) показывают, что задержка происходит, когда страница загружает библиотеку jQuery и нашу таблицу стилей. Я не думаю, что есть проблема с этими файлами, но я действительно не знаю, в чем проблема, поэтому я не могу быть уверен.

Вот еще немного информации о нашей среде. Наши веб-серверы работают под управлением Windows Server 2008 (64-разрядная версия), IIS 7, .Net 3.5. Мы используем балансировщик нагрузки Cisco CSS, настроенный для отправки трафика на тот сервер, который в данный момент имеет наименьшую нагрузку (т.е. балансировщик нагрузки не использует липкие сеансы). Веб-серверы настроены на использование третьего сервера в качестве хранилища сеансов (на третьем сервере запущена служба состояний сеансов ASP.Net).

Есть идеи о том, что может быть причиной задержки?


ОБНОВЛЕНИЕ :

Спасибо за ответы на данный момент. Отвечая на несколько приведенных предложений, я могу с уверенностью сказать, что проблема не в начальной загрузке страницы или каких-либо тяжелых сторонних элементах управления. Мы можем пролистать страницу до 100 раз подряд без задержки, и тогда внезапная задержка происходит в 101-й раз, когда мы ее нажимаем. Кроме того, это может быть важной подсказкой ... когда происходит задержка, я могу сразу же нажать перезагрузить мой браузер, и страница вернется к быстрому времени загрузки ... будет ли это больше указывать на проблему сети / DNS?


ОБНОВЛЕНИЕ 2 :

Кажется, что ошибка возникает только при загрузке библиотеки jQuery. Я уверен, что большую часть времени он забирает его из локального кэша, но даже если срок действия локальной копии истек и она загружает новую копию, загрузка минифицированной библиотеки jQuery, занимающей всего ~ 56 КБ, не займет 2 минуты. в размере.


ОБНОВЛЕНИЕ 3 :

Попробовав Fiddler (впервые), я смог воспроизвести проблему. На этот раз произошла задержка при загрузке файла изображения с сервера. И это произошло во время работы нашего старого сервера, а не веб-фермы! Вот что скрипач сказал об этом файле. Любые идеи о том, какие выводы можно сделать из этого?

Request Count:  1
Bytes Sent:     753
Bytes Received: 242

ACTUAL PERFORMANCE
ClientConnected:    19:53:15:5921
ClientDoneRequest:  19:53:15:8421
Gateway Determination:  0ms
DNS Lookup:         0ms
TCP/IP Connect:     31ms
ServerGotRequest:   19:55:25:7640
ServerBeginResponse:    19:55:25:7952
ServerDoneResponse: 19:55:25:7952
ClientBeginResponse:    19:55:25:7952
ClientDoneResponse: 19:55:25:8108

    Overall Elapsed:    00:02:10.2187500

RESPONSE CODES
HTTP/304:   1

RESPONSE BYTES (by Content-Type)
~headers:   242

И заголовки ответа:

HTTP/1.1 304 Not Modified
Cache-Control: max-age=2592000
Last-Modified: Tue, 04 Aug 2009 05:11:20 GMT
Accept-Ranges: bytes
ETag: "ed5bca0c214ca1:f3a"
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Tue, 08 Dec 2009 02:55:37 GMT

Ответы [ 6 ]

1 голос
/ 07 декабря 2009

Вы можете использовать Fiddler и / или WireShark, чтобы сузить проблему.

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

0 голосов
/ 07 декабря 2009

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

0 голосов
/ 07 декабря 2009

Стоит исключить одну вещь: если домен приложения перезагружается, что заставляет все приложение перезагружаться снова (это примерно две минуты, примерно столько же времени требуется для запуска всего приложения с нуля?).

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

Самый быстрый способ обнаружить это IMHO - запустить обозреватель процессов Sysinternals на сервере и добавить столбец «Всего доменов приложений» на вкладке столбцов .Net. Теперь следите за соответствующим процессом asp.net. Если общее количество доменов приложений увеличивается каждый раз, когда вы испытываете двухминутную задержку, это происходит из-за перезагрузки домена приложения.

0 голосов
/ 07 декабря 2009

Я предлагаю вам сделать холодный запуск приложения, чтобы увидеть, сколько времени требуется, чтобы запустить его в целом. Вы можете сделать это, включив пул приложений, поддерживающий виртуальный каталог. Может случиться так, что пул приложений истекает и выгружается после 20 минут бездействия. Если это так, 101-й запрос может перезапустить его, и могут быть процедуры потепления, которые отнимают много времени. Если вы обнаружите, что это так, я предлагаю вам создать простую процедуру поддержания активности, которая гарантирует, что приложение всегда находится в теплом состоянии. Это можно сделать, запланировав задачу для просмотра URL-адреса на вашем сайте, который имеет мета-заголовок без кэша.

0 голосов
/ 07 декабря 2009

Я обычно использую такой инструмент, как Fiddler / Charles / HttpWatch (базовый - бесплатный), чтобы решить эту проблему, хотя firebug также одинаково хорош. Сколько запросов делает страница? Используете ли вы какие-либо сторонние элементы управления (например, Telerik), которые иногда могут быть тяжелыми. Может быть, ваше приложение / страница тяжелые, и это первый хит этой страницы? И вы кешируете статические ресурсы на стороне клиента (истекает заголовок)?

0 голосов
/ 07 декабря 2009

Рассматривали ли вы предоставление статических файлов с другого веб-сервера, настроенного для этой цели - возможно, в другом домене?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...