TL; DR; Дайте рабочему процессу больше потоков!
Задний план
У нас есть приложение ASP.NET, которое предоставляет веб-API, где одна из «конечных точек / методов» выполняет набор запросов к внешней системе (SQL, AD и т. Д.) И занимает прибл. 4 секунды.
Вызовы ввода-вывода являются синхронными, поэтому поток запроса блокируется, пока все не будет завершено.
Приложение написано на i .NET 4.6.2 и работает на IIS 7.5.
Проблема
Мы испытываем очень резкую нагрузку со 100 запросами к конечной точке в течение короткого периода времени, что, по-видимому, приводит к «нехватке потоков», в результате чего запросы помещаются в очередь. Это приводит к неприемлемому времени отклика для остальной части приложения.
ЦП и память на сервере в порядке во время периода всплеска нагрузки. SQL в порядке, и AD тоже в порядке (то есть они без проблем отвечают на другие запросы из других приложений)
Возможное решение
Моя цель состояла в том, чтобы дать рабочему процессу больше потоков, но я не мог найти правильную конфигурацию.
Я попробовал рекомендации из следующей статьи: https://support.microsoft.com/en-us/help/821268/contention-poor-performance-and-deadlocks-when-you-make-calls-to-web-s
С полученным файлом machine.config:
<processModel autoConfig="false" maxWorkerThreads="200" maxIoThreads="200" minWorkerThreads="100"/>
<httpRuntime minFreeThreads="704" minLocalRequestFreeThreads="608"/>
но похоже, что это дает небольшой результат или его отсутствие по сравнению с использованием значений по умолчанию.
Я что-то упускаю?