ASP.Net и прослушивание события через открытое соединение - возможно ли увеличить количество одновременно выполняющихся потоков? - PullRequest
0 голосов
/ 14 мая 2011

Я пытаюсь использовать IIS для размещения веб-приложения, управляемого событиями.Допустим, я хочу использовать его для приложения типа чата.

Вместо того, чтобы опрашивать раз в секунду или около того (задержка), я хочу оставить открытое соединение с моим приложением, которое возвращается, как только становятся доступными данные.

Проблема в том, что я не могу выполнить более 10 одновременных потоков.

Я установил MaxThreads на 5000/5000, MaxConcurrentRequestsPerCpu на 5000, QueueLimit по умолчанию 5000, MaxConcurrentThreadsPerCPU равно 0(неограниченно).

Единственное, что DefaultConnectionLimit кажется равным 12 по умолчанию, и я не могу изменить его в своем файле web.config.Мне удалось установить его в global.asax Application_Start, но я не знаю, слишком ли поздно его устанавливать в этот момент.В документации сказано, что это не влияет на уже инициализированные ServicePoints.

<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 - это разница от первого запроса до текущего регистрируемого запроса.

Как видите, AvailableThreads снижается до 4990, а затем ожидает продолжения других потоков, прежде чем продолжить.Задержка между запросами, похоже, является ошибкой Fiddlers (которую я использую для загрузки теста).

Я также пытался BadBoy выдавать те же запросы, и он также страдает от ограничения в 10 потоков.

Это потому, что соединения от одного клиента?Есть ли какой-то другой предел, который я пропустил?По общему признанию, сложно провести нагрузочное тестирование на разных хостах.

1 Ответ

1 голос
/ 02 июня 2011

Если вы тестируете свое приложение под Windows 7. В нем установлено 10 одновременных подключений.Кроме того, вы можете найти ( IISTuner ) полезным.

...