ASP.NET IIS — когда запросы ставятся в очередь?

The В следующейстатье Томаса Марквардта описывается, как IIS обрабатывает запросы ASP.Net, максимальные/минимальные рабочие потоки CLR/потоки управляемого ввода-вывода, которые можно настроить для запуска, различные задействованные очереди запросов и их размеры по умолчанию.

Согласно статье, в IIS 6.0 происходит следующее:

  1. ASP.NET получает запросы от потока ввода-вывода IIS и отправляет «HSE_STATUS_PENDING» в поток ввода-вывода IIS
  2. Запросы передаются Рабочий поток CLR
  3. Если запросы имеют высокую задержку и все потоки заняты (количество потоков приближается к httpRuntime.minFreeThreads), то запросы отправляются в очередь запросов уровня приложения (эта очередь относится к домену приложения)
  4. Также ASP.NET проверяет количество одновременно выполняемых запросов. В статье говорится, что «если количество одновременно выполняемых запросов слишком велико», он помещает входящие запросы в глобальную очередь запросов ASP.NET (это для каждого рабочего процесса) (пожалуйста, проверьте обновление 2)

Я хочу чтобы узнать, каково «пороговое значение», в какой момент ASP.NET считает, что количество запросов, которые в настоящее время выполняются, слишком велико, а затем начинает ставить запросы в глобальную очередь запросов ASP.NET?

Я думаю, что этот порог будет зависеть от конфигурации максимального количества рабочих потоков, но может быть какая-то формула, основанная на том, какой ASP.NET определит, что количество одновременно выполняемых запросов слишком велико, и начнет помещать запросы в глобальную очередь запросов ASP.NET. Что может эта формула? или этот параметр настраивается?


Обновление

Я перечитал статью еще раз и в комментариях нашел это:

1) В IIS 6 и в классическом режиме IIS 7 каждое приложение (AppDomain) имеет очередь, которую он использует для поддержания доступности рабочего потоки. Количество запросов в этой очереди увеличивается, если число доступных рабочих потоков падает ниже предела, указанного httpВремя выполнения minFreeThreads. Когда предел, указанный httpRuntime appRequestQueueLimit превышен, запрос отклонено с кодом состояния 503, и клиент получает HttpException с сообщением «Сервер слишком занят». Существует также Счетчик производительности ASP.NET «Запросы в очереди приложений», который указывает, сколько запросов находится в очереди. Да, поток CLR Пул — это тот, который предоставляется классом .NET ThreadPool.

2) Неверное имя requestQueueLimit. фактически ограничивает максимальное количество запросов, которые может обслужить ASP.NET одновременно. Сюда входят как запросы, поставленные в очередь, так и запросы, которые выполняются. Если производительность «Текущие запросы» счетчик превышает requestQueueLimit, новые входящие запросы будут отклонено с кодом состояния 503.

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


Обновление 2 С моей стороны была ошибка в понимании. Я перепутал описания IIS 6 и IIS 7.
По сути, когда ASP.NET размещается в IIS 7.5 и 7.0 в интегрированном режиме, очереди на уровне приложений больше не присутствуют, ASP.NET поддерживает глобальную очередь запросов.
Таким образом, IIS 7/7.5 начнет помещать запросы в глобальную очередь запросов, если количество выполняемых запросов будет считаться большим. Вопрос больше относится к IIS 7/7.5, а не к 6.

Что касаетсяIIS 6.0 , глобальной очереди запросов ASP.NET нет, но верно следующее:
1. ASP.NET получает запросы от потока ввода-вывода IIS и отправляет «HSE_STATUS_PENDING» в поток ввода-вывода IIS
. 2. Запросы передаются рабочему потоку CLR
. 3. Если запросы имеют большую задержку и все потоки заняты (количество потоков приближается к httpRuntime.minFreeThreads), то запросы размещаются в очереди запросов уровня приложения (эта очередь относится к AppDomain)
. 4. Кроме того, ASP.NET проверяет количество запросов, находящихся в очереди и выполняемых в настоящее время, прежде чем принять новый запрос. Если это число больше, чем значение, указанное в processModel.requestQueueLimit, тогда входящие запросы будут отклонены с ошибкой 503 server busy.

32
задан nmdr 11 June 2012 в 10:59
поделиться