Большой процент запросов в CLRThreadPoolQueue - PullRequest
0 голосов
/ 25 февраля 2020

У нас есть приложение ASP. NET MVC, размещенное в сервисе приложений azure. После запуска профилировщика для диагностики возможных медленных запросов мы были удивлены, увидев следующее:

Profiler Result

Slow Requests

Необычно высокий% медленных запросов в CLRThreadPoolQueue. Теперь мы запустили несколько сеансов профилей, каждый из которых возвращается с 40-80% в CLRThreadPoolQueue (то, чего мы никогда не видели в предыдущих профилях). Процессор каждый раз был ниже 40%, и после проверки наших показателей мы не получаем внезапных всплесков запросов.

Большинство запросов, перечисленных как медленные, являются супер простыми вызовами API. Мы добавили кеширование ответов и сделали их asyn c. Единственное, что они делают, - попадают в базу данных в поисках результата одной записи. Мы проверили метрики в базе данных, и время выполнения запроса составляет около 50 мс или меньше. Просмотр информации об этих запросах в приложении подтверждает это и показывает, что запрос к базе данных не выполняется до самого конца временной шкалы запроса (я предполагаю, что это запрос, находящийся в очереди).

Недавно мы начали включать SignalR в часть нашего приложения. Он не полностью используется, но находится в кодовой базе. С тех пор мы перешли на использование службы Azure SignalR и не увидели никаких изменений. Добавление SignalR является единственным «существенным» изменением / дополнением, которое мы сделали после того, как столкнулись с этой проблемой.

Я понимаю, что мы можем увеличивать и / или увеличивать minWorkerThreads. Однако мне кажется, что я просто лечу симптом, а не причину.

Вещи, которые мы пробовали:

  • Поиск наиболее частых запросов и их асинхронизация c ( они были не раньше)
  • Кэширование ответов на частые запросы
  • Использование Azure Службы SignalR вместо размещения ее в одной сети
  • Запуск дампов памяти и обращение в azure поддержка (ничего не найдено).
  • Масштабирование до S3
  • Профилирование с отчетом о потоке и без него

- Ни один из этих шагов не решил нашу проблему -

Как определить, какие запросы и / или код вызывают накапливание запросов в CLRThreadPoolQueue?

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