У нас есть веб-приложение, написанное на C #, использующее MVC 4 и Webapi2 и работающее на Azure.Наши клиенты сообщают периодические медленные запросы нашему серверу, и мы пытаемся отлаживать его в течение нескольких недель.
После запуска профилировщика на сайте мы сузили его до множества экземпляров "BLOCKED_TIME".Мы видим их повсюду, даже в самых простых конечных точках контроллера asp.net.Они могут занять много секунд.Кажется, это связано с темами, ожидающими ... чего-то.Проблема в том, что нет очевидного способа понять и решить проблему.Время процессора и время DTU базы данных очень мало и похоже, что серверы вообще не нагружены.Поддержка MS не помогает.
В качестве возможного рычага, который мы могли бы использовать, мы развернули некоторый код в Application_Start()
из Global.asax.cs
, чтобы установить минимальные потоки:
ThreadPool.SetMinThreads(150, 150);
Код выполняетсябез ошибок, но в обозревателе процессов Azure мы по-прежнему видим, как потоки идут вверх и вниз, например, до 102, до 95, до 100, до 98 и т. д. Я ожидаю, что число будет расти и никогда не будет падатьесли он не превысил наш минимум 150. Поэтому, по сути, наши попытки установить минимальные потоки равными 150, похоже, полностью игнорируются.
Что мы делаем неправильно?Или есть другие рычаги, которые мы можем потянуть, чтобы избавиться от страшного «BLOCKED_TIME»?