Как я могу найти, почему некоторые классические страницы asp случайно выполняются очень долго? - PullRequest
3 голосов
/ 21 апреля 2009

Я работаю над довольно большим классическим приложением asp / SQL Server. Новая версия была выпущена несколько месяцев назад с большим количеством новых функций, и у меня где-то должна быть очень неприятная ошибка: некоторые очень простые страницы произвольно выполняются очень долго.

Несколько подсказок:

  • Это не база данных: когда я запускаю профилировщик запросов, он не обнаруживает никаких длительных запросов
  • Когда я запускаю средства диагностики IIS, reqviewer показывает, что запрос находится в состоянии «обработка»
  • Это может произойти на любой странице
  • Я не могу воспроизвести это легко, это совершенно случайно.
  • Чтобы иметь представление о «очень долгом времени»: сегодня утром у меня была страница, на выполнение которой ушло более 5 минут, когда она обычно должна быть возвращена клиенту менее чем за 100 мс.
  • Приложение может обрабатывать довольно большие объемы загрузки и выгрузки файлов (до 2 ГБ). Это также обрабатывается классическим сценарием asp с использованием SoftArtisan FileUp. Не думаю, что это может стать причиной проблемы, у нас уже давно есть эти загрузки.
  • У меня была проблема на двух разных серверах (в двух разных местах, с разными наборами данных). Один запускает приложение с хорошей старой версией SQL Server 2000, а другой - SQL Server 2005. В обоих случаях веб-сервером является IIS 6.

Есть идеи, что это за проблема или как ее решить?

Спасибо.

Sebastien


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

Проблема возникла из-за фрагментации памяти. Некоторые страницы ASP использовались для загрузки файлов с сервера. Размеры файлов могут варьироваться от нескольких КБ до более 2 ГБ. Эти различия в размере вызвали фрагментацию памяти. Страницы asp также могут занять некоторое время (время загрузки пользователями минус то, что помещено в кэш на уровне IIS), что не является стандартным для страниц сервера, которые должны выполняться быстро.

Вот что я сделал, чтобы улучшить вещи:

  • Поместите всю логику загрузки в одну страницу asp с отключенным сеансом
  • Это позволило мне поместить эту страницу asp в определенный пул, который можно было перерабатывать время от времени (загрузка теперь больше не будет мешать остальной части приложения)
  • Включите LFH (Low Fragmention Heap), который не является по умолчанию в Windows 2003, чтобы уменьшить фрагментацию памяти

Ссылки для LFH:

Ответы [ 5 ]

2 голосов
/ 04 февраля 2011

Я заметил то же самое в классическом приложении ASP + ajax, над которым я работал. Используя Timer, я рассчитал время загрузки страницы до 153 миллисекунд, но на графике водопада Firebug он случайно показывает 3,5 секунды. Выходные данные таймера находятся в ответе, а в диаграмме водопада утверждается, что это Firefox, ожидающий ответа от сервера. Поскольку диаграмма водопада также показывает ответ, я могу сравнить диаграмму водопада с таймером, и существует огромное расхождение «время от времени»

1 голос
/ 04 февраля 2011

Следует обратить внимание на то, что если в IIS включена отладка на стороне сервера, веб-сервер будет работать в однопоточном режиме.

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

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

1 голос
/ 30 апреля 2009

Есть ли вероятность того, что на SQL Server выполняются запросы полнотекстового поиска?

Потому что, если это так, и если SQL Server не имеет доступа к Интернету, это может вызвать 45-секундную задержку каждые несколько часов или около того, когда он пытается проверить сертификаты (хотя это не относится к SQL Server 2000).

Для подробного объяснения того, о чем я говорю, прочитайте это .

1 голос
/ 30 апреля 2009

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

1 голос
/ 21 апреля 2009

Можете ли вы установить, является ли это проблемой для всех страниц или общего подмножества страниц?

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

Эта проблема касается нескольких клиентов или только нескольких?

IOW, есть проблема с определенной версией ОС браузера.

Это общедоступный или интранет?

Можете ли вы воспроизвести проблему с вашего клиента?

...