
У нас есть веб-сайт, развернутый на Azure, который имеет ужасную производительность. Когда нагрузка увеличивается, время отклика увеличивается до целых минут! Загрузка ЦП даже не высокая, где-то в районе 40% (мы запускаем один средний экземпляр (S2)).
После долгой отладки (я понятия не имел, что стало причиной этого) я наконец наткнулся на журнал «FREB», в котором говорится, что запросы ставятся в очередь:
- AspNetStart Data1="GET", Data2="/профиль/aanvullen", Data3="" 13:48:44.279
- AspNetReqQueued 13:48:44.810
- AspNetReqDequeued 13:49:39.545
- AspNetAppDomainEnter Data1="/LM/W3SVC/xxxx/ROOT-1-xxxxx
Я думал, что экземпляры Azure будут настроены «оптимально» из коробки, так что мне не придется беспокоиться о настройке таких вещей, как maxconnection
или maxConcurrentThreadsPerCPU
. Сайт не использует базу данных, но он вызывает 2 разных REST API, поэтому я думал, что очередь будет происходить там. Я попробовал проверить свойство, webrequest.ServicePoint.ConnectionLimit
но я помню, что оно вывело что-то вроде 2 миллионов (или, возможно, max int).
Поскольку загрузка ЦП низкая, Azure не будет запускать новый экземпляр, и я не думаю, что еще один экземпляр поможет.
По сути у меня 2 вопроса:
- В чем может быть причина? Что мне следует изменить?
- Как мне это отладить? В Azure так много графиков и настроек. Я не уверен, где я могу увидеть именно то, что мне нужно увидеть. Является ли пропускная способность узким местом, количество открытых запросов к определенному веб-сервису, что-то еще и т. д.