#asp.net #iis #limit #threadpool #connection
#asp.net #iis #ограничение #threadpool #подключение
Вопрос:
Я пытаюсь использовать IIS для размещения веб-приложения, управляемого событиями. Допустим, я хочу использовать его для приложения типа чата.
Вместо опроса примерно раз в секунду (задержка) Я хочу оставить открытое соединение с моим приложением, которое возвращается, как только будут доступны данные.
Проблема в том, что я не могу выполнить более 10 одновременных потоков.
Я установил maxThreads равным 5000/5000, MaxConcurrentRequestsPerCPU равным 5000, QueueLimit по умолчанию равен 5000, MaxConcurrentThreadsPerCPU равен 0 (неограниченный).
Единственное, что DefaultConnectionLimit по умолчанию равно 12, и, похоже, я не могу изменить это в своем web.config. Мне удалось установить его в global.asax Application_Start, но я не знаю, не слишком ли поздно устанавливать его в этот момент. В документации говорится, что это не влияет на уже инициализированные точки обслуживания.
<system.net>
<connectionManagement>
<add address="*" maxconnection="100" />
</connectionManagement>
</system.net>
Это то, что у меня есть в моем web.config (что касается DefaultConnectionLimit).
5/14/2011 3:34:45 PM with timediff 0 : Entered method with threadId: 6, MaxThreads is 5000/5000, MaxConcurrentRequestsPerCPU is 5000, MaxConcurrentThreadsPerCPU is 0, MinThreads is 1, AvailableThreads is 4998 and DefaultConnectionLimit is 1500
5/14/2011 3:34:45 PM with timediff 0 : Entered method with threadId: 5, MaxThreads is 5000/5000, MaxConcurrentRequestsPerCPU is 5000, MaxConcurrentThreadsPerCPU is 0, MinThreads is 1, AvailableThreads is 4998 and DefaultConnectionLimit is 1500
5/14/2011 3:34:46 PM with timediff 0.5 : Entered method with threadId: 7, MaxThreads is 5000/5000, MaxConcurrentRequestsPerCPU is 5000, MaxConcurrentThreadsPerCPU is 0, MinThreads is 1, AvailableThreads is 4997 and DefaultConnectionLimit is 1500
5/14/2011 3:34:47 PM with timediff 1.5 : Entered method with threadId: 8, MaxThreads is 5000/5000, MaxConcurrentRequestsPerCPU is 5000, MaxConcurrentThreadsPerCPU is 0, MinThreads is 1, AvailableThreads is 4996 and DefaultConnectionLimit is 1500
5/14/2011 3:34:48 PM with timediff 2.5 : Entered method with threadId: 9, MaxThreads is 5000/5000, MaxConcurrentRequestsPerCPU is 5000, MaxConcurrentThreadsPerCPU is 0, MinThreads is 1, AvailableThreads is 4995 and DefaultConnectionLimit is 1500
5/14/2011 3:34:49 PM with timediff 3.5 : Entered method with threadId: 10, MaxThreads is 5000/5000, MaxConcurrentRequestsPerCPU is 5000, MaxConcurrentThreadsPerCPU is 0, MinThreads is 1, AvailableThreads is 4994 and DefaultConnectionLimit is 1500
5/14/2011 3:34:50 PM with timediff 4.5 : Entered method with threadId: 12, MaxThreads is 5000/5000, MaxConcurrentRequestsPerCPU is 5000, MaxConcurrentThreadsPerCPU is 0, MinThreads is 1, AvailableThreads is 4993 and DefaultConnectionLimit is 1500
5/14/2011 3:34:51 PM with timediff 5.5 : Entered method with threadId: 13, MaxThreads is 5000/5000, MaxConcurrentRequestsPerCPU is 5000, MaxConcurrentThreadsPerCPU is 0, MinThreads is 1, AvailableThreads is 4992 and DefaultConnectionLimit is 1500
5/14/2011 3:34:52 PM with timediff 6.5 : Entered method with threadId: 14, MaxThreads is 5000/5000, MaxConcurrentRequestsPerCPU is 5000, MaxConcurrentThreadsPerCPU is 0, MinThreads is 1, AvailableThreads is 4991 and DefaultConnectionLimit is 1500
5/14/2011 3:34:52 PM with timediff 7 : Entered method with threadId: 15, MaxThreads is 5000/5000, MaxConcurrentRequestsPerCPU is 5000, MaxConcurrentThreadsPerCPU is 0, MinThreads is 1, AvailableThreads is 4990 and DefaultConnectionLimit is 1500
5/14/2011 3:36:45 PM with timediff 120 : Exiting method with threadId: 6
5/14/2011 3:36:45 PM with timediff 120 : Exiting method with threadId: 5
5/14/2011 3:36:46 PM with timediff 120.5 : Exiting method with threadId: 7
5/14/2011 3:36:47 PM with timediff 121.5 : Exiting method with threadId: 8
5/14/2011 3:36:48 PM with timediff 122.5 : Exiting method with threadId: 9
5/14/2011 3:36:49 PM with timediff 123.5 : Exiting method with threadId: 10
Приведенный выше отрывок из файла журнала, который я создаю для проверки параллелизма потоков. Это просто метод действия MVC с 120-секундным спящим режимом. Timediff — это разница между первым запросом и текущим запросом, который регистрируется.
Как вы можете видеть, доступные потоки снижаются до 4990, а затем ожидают завершения других потоков, прежде чем продолжить. Задержка между запросами, похоже, вызвана ошибкой скрипачей (которую я использую для нагрузочного тестирования).
Я также пробовал BadBoy выдавать те же запросы, и он также страдает от ограничения в 10 потоков.
Это потому, что соединения от одного и того же клиента? Есть ли какое-то другое ограничение, которое я пропустил? По общему признанию, сложно выполнить нагрузочное тестирование на разных хостах..
Ответ №1:
Если вы тестируете свое приложение под Windows 7. У него есть ограничение на 10 одновременных подключений. Кроме того, вы можете найти (IISTuner) полезным.
Комментарии:
1. @Zuum Спасибо! Черт возьми, эту информацию было нелегко найти. Конечно, следовало попробовать на серверной версии. Есть ли у вас какой-либо ресурс, в котором упоминается это, а также упоминаются ограничения на Windows Server 2008 / R2?
2. Я не знаю, существует ли ограничение для Server 2008. посмотрите это видео: youtube.com/watch?v=flj-919bKMU