Теперь, согласно статье, в IIS 6.0 происходит следующее:
- ASP.NET собирает запросы из потока IO IO и публикует "HSE_STATUS_PENDING" для IO IO Thread
- Запросы передаются в поток рабочей среды CLR
- Если запросы имеют высокую задержку и все потоки заняты (количество потоков приближается к httpRuntime.minFreeThreads), то запросы отправляются в очередь запросов уровня приложения (эта очередь для AppDomain)
-
Также ASP.NET проверяет количество одновременно выполняемых запросов. В статье говорится, что "если количество одновременных выполнения запросов слишком велико", он ставит очереди входящих запросов в глобальную очередь запросов ASP.NET(это для каждого рабочего процесса)(проверьте Update 2)
Я хочу знать, что такое "пороговое значение", с которого ASP.NET считает, что количество запросов в настоящее время слишком велико, а затем запускает очереди в глобальную очередь запросов ASP.NET?
Я думаю, что этот порог будет зависеть от конфигурации максимального числа рабочих потоков, но может быть какая-то формула, на основе которой ASP.NET будет определять, что количество одновременно выполняемых запросов слишком велико и начинает очереди запросов к Глобальная очередь запросов ASP.NET. Что может быть эта формула? или этот параметр настраивается?
Обновление
Я прочитал статью снова, и в разделах комментариев я нашел это:
1) В IIS 6 и в классическом режиме IIS 7 каждое приложение (AppDomain) имеет очередь, которую он использует для поддержания доступности рабочего потоки. Количество запросов в этой очереди увеличивается, если число доступных рабочих потоков падает ниже предела, указанного httpRuntime minFreeThreads. Когда предел, указанный в httpRuntime appRequestQueueLimit превышено, запрос отклонен с кодом статуса 503, и клиент получает HttpException с сообщением "Сервер слишком занят". Существует также Счетчик производительности ASP.NET, "Запросы в очереди приложений", который указывает, сколько запросов находится в очереди. Да, поток CLR пул - это класс, открытый классом .NET ThreadPool.
2) RequestQueueLimit плохо назван. Фактически это ограничивает максимальное количество запросов, которые могут обслуживаться ASP.NET одновременно. Это включает в себя как запросы, поставленные в очередь, так и запросы, которые выполняются. Если производительность "Запросы текущие" счетчик превышает requestQueueLimit, новые входящие запросы будут отклонен с кодом статуса 503.
Таким образом, по существу requestQueueLimit ограничивает количество запросов, которые находятся в очереди (я предполагаю, что он будет суммировать количество запросов, помещенных в очередь приложений, плюс глобальную очередь запросов ASP.Net плюс количество выполняемых в настоящее время запросов) и выполняются. Все, хотя это не отвечает на исходный вопрос, оно предоставляет информацию о том, когда мы можем получить ошибку занятости 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 собирает запросы из потока IO IO и публикует "HSE_STATUS_PENDING" для IOS IO Thread
2. Запросы передаются рабочей ветке CLR
3. Если запросы имеют высокую задержку и все потоки заняты (количество потоков приближается к httpRuntime.minFreeThreads), то запросы отправляются в очередь запросов уровня приложения (эта очередь для AppDomain)
4. Также ASP.NET проверяет количество запросов, находящихся в очереди и выполняющихся в настоящее время, перед принятием нового запроса. Если это число больше значения, указанного processModel.requestQueueLimit, тогда входящие запросы будут отклонены с ошибкой занятости 503.