We have a website deployed on Azure that has dreadful performance. When load increases, response times increase to whole minutes! CPU load is not even high, somewhere in the 40% region (we run one medium instance (S2)).
After much debugging (I had no idea what caused this), I finally stumbled upon a 'FREB' log where it says the requests are being queued:
- AspNetStart Data1="GET", Data2="/profiel/aanvullen", Data3="" 13:48:44.279
- AspNetReqQueued 13:48:44.810
- AspNetReqDequeued 13:49:39.545
- AspNetAppDomainEnter Data1="/LM/W3SVC/xxxx/ROOT-1-xxxxx
I thought Azure instances would be configured 'optimally' out of the box so I would not have to worry about setting stuff like maxconnection
or maxConcurrentThreadsPerCPU
. The site uses no database, but it does invoke 2 different REST api's, so I thought queuing would occur there. I tried checking the webrequest.ServicePoint.ConnectionLimit
property but I recall it printed something like 2 million (or might have been max int).
As CPU usage is low, Azure won't spin up a new instance and I don't think another instance will help.
Basically I have 2 questions:
- What could be the cause of this / what should I change?
- How could I debug this? There are so many graphs and settings in Azure. I'm not sure where I can see exactly what I need to see. Is bandwidth a bottleneck, the number of open requests to a particular webservice, something else, etcetera.