Долгое время HttpWebRequests - PullRequest
       8

Долгое время HttpWebRequests

6 голосов
/ 02 февраля 2010

У меня есть веб-приложение ASP.NET, работающее на сервере IIS6. Приложение выполняет потенциально длительные вызовы службы xml на удаленной машине. Некоторые сервисные вызовы на удаленном компьютере выполняются очень долго (иногда до 4 минут). Долгосрочным решением было бы сделать вызовы асинхронными, но в качестве краткосрочного решения мы хотим увеличить время ожидания для вызовов и общее время ожидания httpRequest.

Я опасаюсь, что длительные вызовы заполнят очередь запросов и не позволят завершить «нормальные» запросы страниц. Как настроить сервер, IIS и приложения для временного решения проблемы?

В настоящее время существует примерно 200 запросов страниц в минуту, что приводит к 270 запросам на обслуживание в минуту.

  • Текущее время выполнения составляет 360 (6 минут)
  • Текущее время ожидания вызова службы: 2 минуты

1 Ответ

8 голосов
/ 23 февраля 2011

В базе знаний Microsoft есть статья, в которой содержится почти вся необходимая информация:

* Конфликт, низкая производительность и взаимоблокировки при отправке запросов веб-службы из приложений ASP.NET

<ч /> Я дам вам некоторые исследования, которые я провел в отношении некоторых конкретных вопросов, рассмотренных в статье выше. Эта информация ниже относится к IIS6, комментарии для IIS7, где это применимо.

Увеличение пула рабочих потоков процессора с 25 до не менее 100

Значения по умолчанию для размера пула потоков - 100, поскольку значение по умолчанию для autoConfig равно true .

Значения, охватываемые autoConfig , равны

  • maxWorkerThreads
  • maxIoThreads
  • maxConnection

Существует еще одно значение, которое все еще должно измениться на 25: ASPProcessorThreadMax , это можно установить только в метабазе IIS (с помощью инструмента adsutil ) в IIS6. [Эквивалентом IIS7 является значение processorThreadMax ]

Поэтому я предпочитаю не изменять настройки machine.config , так как они в порядке, и есть другие параметры, на которые может повлиять отключение autoconfig , а не изменение ASPProcessorThreadMax от 25 до 100 через метабазу IIS (единственный способ изменить это значение).

, например

cscript %SYSTEMDRIVE%\Inetpub\AdminScripts\<nowiki>adsutil.vb</nowiki>s SET W3SVC/AspRequestQueueMax 100

Максимальное количество соединений на сервер

maxconnection autoconfig устанавливает это значение равным 12 * числу процессоров, то есть сколько подключений может быть выполнено к каждому адресу, к которому вы подключаетесь одновременно.

Debugging

Вот несколько вещей, которые вы можете сделать:

Отслеживать, ожидают ли запросы в очереди

Следить за следующим счетчиком:

  • Выполнить perfmon
  • Добавить счетчик: Приложения / запросы ASP.NET в очереди приложений

Это покажет нам, если рабочие элементы поставлены в очередь из-за нехватки рабочих.

Проверка идентификации, используемой пулом приложений

  1. Открыть IIS Manager
  2. Проверьте, какой пул приложений используется вашим сайтом в диспетчере IIS.
  3. Выберите пул приложений, используемый в списке Пулы приложений , затем щелкните правой кнопкой мыши -> Свойства и посмотрите, какая учетная запись используется.
  4. Это должно быть Сетевая служба по умолчанию.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...