Интегрированный конвейер IIS7: взаимодействие между параметрами maxConcurrentRequestsPerCPU и requestQueueLimit - PullRequest
10 голосов
/ 19 января 2011

Во-первых, здесь представлен большой обзор жизненного цикла HTTP-запроса IIS7 и различных настроек, влияющих на производительность:

Использование потоков ASP.NET в IIS 7.0 и 6.0

В частности, в dotNet 4 значения по умолчанию для maxConcurrentRequestsPerCPU и RequestQueueLimit установлены на 5000. Например. эквивалентно: (в aspnet.config):

<system.web>
   <applicationPool 
      maxConcurrentRequestsPerCPU="5000" 
      maxConcurrentThreadsPerCPU="0" 
      requestQueueLimit="5000" /> (** see note below)
</system.web>

Мне кажется, что на многопроцессорном / базовом сервере запрос requestQueueLimit здесь всегда будет вызываться задолго до ограничения perCPU. Таким образом, если вы на самом деле хотите получить до 5000 запросов на процессор, я бы ожидал, что requestQueueLimit нужно увеличить до 5000 * CPUCount или просто отключить.

Верна ли моя интерпретация? Если это так, я могу отключить requestQueueLimit? (установить его на ноль?). Документация по этому параметру, по-видимому, не относится к этому вопросу (может, я что-то упустил или неправильно прочитал?)

** примечание из вышеприведенной статьи: requestQueueLimit имеет неправильное имя. Фактически он ограничивает максимальное количество запросов, которые могут быть одновременно обработаны ASP.NET. Это включает как запросы, которые находятся в очереди, так и запросы, которые выполняются. Если счетчик производительности «Текущее количество запросов» превышает requestQueueLimit, новые входящие запросы будут отклонены с кодом состояния 503)

Ответы [ 2 ]

12 голосов
/ 26 января 2011

*** Правильно ли мое толкование?

Да, если вы хотите выполнить более 5000 запросов одновременно, вам нужно увеличить requestQueueLimit. RequestQueueLimit ограничивает общее количество запросов в системе. Из-за его унаследованности, это фактически общее количество запросов в системе, а не количество запросов в какой-либо очереди. Его цель - предотвратить переворот сервера из-за нехватки физической памяти, виртуальной памяти и т. Д. При достижении предела входящие запросы получат быстрый 503 ответ «Сервер слишком занят». Кстати, текущее количество запросов в системе отображается счетчиком производительности «ASP.NET \ Requests Current».

*** я могу отключить requestQueueLimit? (установить его на ноль?)

Вы можете эффективно отключить его, установив для него большое значение, например, 50000. Вы должны установить значение в файле aspnet.config. Я сомневаюсь, что ваш сервер может обрабатывать 50000 одновременных запросов, но если это так, то удвойте его. Установка его в ноль не отключит его ... как ни странно, это означает, что одновременно может выполняться не более одного запроса.

Кстати, похоже, в v4 есть ошибка. В интегрированном режиме он успешно считывает значение requestQueueLimit, только если он сконфигурирован в файле aspnet.config как , описанный в MSDN . По какой-то причине v4 не читал его из machine.config, когда я немного поэкспериментировал с ним.

2 голосов
/ 20 января 2011

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

...