ASP.NET Requests Queued приводит к разрушению сайта.SQL-сервер, IIS6 - PullRequest
4 голосов
/ 16 ноября 2011

Я унаследовал довольно сложную систему (и проблему), с которой мне нужна помощь.

У меня есть веб-сервер со следующими характеристиками:

  • Оборудование:
    • Server 2003 32-разрядный
    • IIS 6
    • 8 ядер (16 Вт с гиперпоточностью)
    • 12 ГБ ОЗУ
    • ASP.NET site
    • 3 пула приложений, так что 3 экземпляра w3wp.exe работают.

Эта система обслуживает большое количество людей, и пропускная способность в рабочие часы довольно постоянна и достигает ~ 68 000 Кбит/ s

Бывают моменты, когда система «выходит из строя» - сайт работает очень медленно, что вызывает много телефонных звонков.Вещи обычно замедляются в течение 60 секунд, но значительно различаются по продолжительности.Иногда всего несколько секунд, а иногда 3 минуты и более.

У меня установлены пулы приложений, которые перерабатывают где-то около 600 МБ используемой памяти.Это не точно, но они перерабатывают самостоятельно с большим успехом.Иногда я вручную перезаписываю «основной» пул, чтобы очистить описываемую проблему.

Это то, что, как я знаю, происходит, когда дела идут медленно.

  • Пропускная способность сети значительно падает.
  • Запросы в очереди в счетчиках производительности ASP.NET увеличиваются.
  • В тандеме с увеличением числа задержанных страниц в очереди запросов.(Я использую простую страницу ASP, которая выполняет SQL-вызов и просто говорит «Система работает» - эта страница контролируется на задержку)

  • Общее использование ЦП увеличивается.

  • Общее потребление памяти w3wp.exe возрастает.

В моем сознании происходит то, что, по-моему, происходит.

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

Я прочитал много статей об очередях потоков, пулах потоков и т. Д. Это хороший пример: http://williablog.net/williablog/post/2008/12/02/Increase-ASPNET-Scalability-Instantly.aspx, и я думаю, это подсказка, которая поможет мне решить мою проблему ... ноЯ не уверен.Мой файл "Machine.config" для версии asp.net, которую я использую, не указывает ни одно из значений потоков, перечисленных в статье, поэтому мы используем значение по умолчанию для всего, что, по моему мнению, неверно, учитывая нашу ситуацию.

Если бы вы были мной;Каковы Ваши дальнейшие действия?Как вы думаете, где проблема?

edit: вот скриншот.Это должно быть очевидно, когда проблема происходит.http://i.imgur.com/5BJlq.png

edit:

Я хочу изменить эти значения для нашей настройки.Сначала несколько вопросов:

1) После внесения изменений, что нужно перезапустить, чтобы они вступили в силу?

2) Как эти настройки выглядят для системы с 8 физическими ядрами?

maxconnection = 96
maxIoThreads = 100
maxWorkerThreads = 100
minFreeThreads = 704 
minLocalRequestFreeThreads = 608

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

Не весело.

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

Некоторые следующие шаги могут быть:

  • Просмотрите журналы IIS каждого сайта в поисках таких вещей, как:
    • Коды ответов HTTP (5xx, 4xx, 3xx)
    • Время ответа на запрос
  • Просмотр журналов событий Windows
    • Как часто выполняются циклы пулов приложений?
    • Ошибки приложения и т. Д.
  • Проверьте настройки processModel в соответствии с предложением @vinayc, чтобы убедиться, что предшественник не получил "хитрый"
  • Установить DebugDiag - удивительно хороший инструмент для некоторого базового анализа проблем с памятью и сбоями.
    • Это также может помочь вам захватывать снимки памяти для последующей диагностики.
    • Tess Ferrandez blog может помочь сделать анализ головок / хвостов памяти.
  • Узнайте, сколько веб-приложений запущено в каждом AppPool.
  • Изучите использование «веб-сада», чтобы, возможно, помочь свести к минимуму количество пользователей, затронутых «замедлением»
  • Включен ли антивирусный сканер?Это работает?Если это так, проверьте исключения.
  • Доступны ли группы приложений для устранения неполадок?Определите, есть ли у них специальные инструментальные средства приложения, которые могут помочь диагностировать проблему.

Является ли поведение «новым»?Или это всегда было там?Если «новый», можете ли вы отследить, какое развертывание могло вызвать новое поведение?

Может ли приведенное описание поведения «замедления» быть отнесено к перезапуску приложения и, как следствие, к повторному подключению приложения?ala - синдром первого запроса.

Просмотр журналов помогает понять, как используются сайты / приложения, что может быть особенно важно, если у вас нет кодовой базы. Logparser - отличный инструмент для анализа логов IIS (а также других форматов).

Удачи!

Z

1 голос
/ 16 ноября 2011

Параметры, о которых вы говорите, являются частью элемента processModel в элементе system.web файла machine.config.Для IIS6 применимо следующее:

autoConfig
maxIoThreads
maxWorkerThreads
minIoThreads
minWorkerThreads
requestQueueLimit
responseDeadlockInterval

Как правило, вы найдете только autoConfig="true", а не другие элементы.Автоконфигурация устанавливает значения в соответствии с конфигурацией вашего компьютера - настройка выполняется в соответствии с рекомендуемыми значениями (см. объяснение Threading раздел из этой статьи), которые совпадают со ссылкой наВы предоставили.
Статья , хотя она и устарела, но я очень полезен, если вы хотите настроить эти параметры вручную.

С другой стороны, при нагрузке, которую вы обслуживаете,Я бы порекомендовал две вещи (если вы еще не пробовали)

  • Используйте агрессивное кэширование вывода - даже если данные динамические, кэширование, скажем, в течение 30-60 секунд, может дать определенный импульс вашей нагрузке.
  • Если вы подозреваете, что некоторые запросы слишком загружают потоки, попробуйте переместить эти ресурсы в другой пул приложений (вы можете использовать другой веб-сайт с другим поддоменом или использовать другой виртуальный каталог / приложение ивыберите другое приложение-пул)
...