WCF: почему пул потоков не создает дополнительные потоки ввода-вывода - PullRequest
3 голосов
/ 01 октября 2010

у нас проблемы с производительностью в одном из наших веб-сервисов WCF.

Мы переживаем, что:

  • В ASP.NET заканчиваются рабочие потоки и начинается очередь. Без магии.
  • Рабочие элементы очередей WCF для обработки потоками ввода-вывода. Хорошо.
  • Я понимаю, что задержки могут возникать при создании новых потоков ввода-вывода. Эти задержки могут быть существенными.

Однако, похоже, что новые потоки ввода-вывода не создаются вообще или только очень медленно.

Даже после нескольких минут пребывания в 96 заблокированных рабочих потоках существует только 9 потоков ввода-вывода!

Служба работает на 8-ядерном компьютере. Пул содержит один свободный поток на ядро.

http://theburningmonk.com/2010/05/wcf-improve-performance-with-greater-concurrency/ (и все записи в блоге Wenlong Dong).

Кажется, что размер пула потоков увеличился на один дополнительный поток ввода-вывода, в то время как запросы находились в очереди уже более 5 минут.

Почему размер пула потоков ввода-вывода меняется так медленно, а может, и вовсе не меняется? Какие параметры нужно искать, чтобы контролировать рост пула?

Вывод WinDbg:

0: 000>! Threadpool Загрузка процессора 17% Рабочая нить: всего: 97 работает: 96 в режиме ожидания: 1 MaxLimit: 800 MinLimit: 8 Запрос на работу в очереди: 3

Количество таймеров: 14

Порт завершения потока: Всего: 8 Свободно: 1 Максимальное освобождение: 16 Текущий предел: 9 Максимальный предел: 800 Минимальный предел: 8

Ожидающие работы элементы:

Статистика: MT Count TotalSize Имя класса 50e7c220 91 1820 System.ServiceModel.Channels.IOThreadScheduler + CriticalHelper + WorkItem Всего 91 объект

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...