у нас проблемы с производительностью в одном из наших веб-сервисов 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 объект