3

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:

  1. AspNetStart Data1="GET", Data2="/profiel/aanvullen", Data3="" 13:48:44.279
  2. AspNetReqQueued 13:48:44.810
  3. AspNetReqDequeued 13:49:39.545
  4. 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:

  1. What could be the cause of this / what should I change?
  2. 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.
Razzie
  • 173
  • 7
  • Did you manage to move forward with this? – JCS Sep 26 '16 at 09:10
  • yes, one of the reasons was http://stackoverflow.com/questions/30581673/azure-performance-issue-of-net-mvc-5-website-latency – Razzie Sep 27 '16 at 09:50
  • also, we are depending a lot on 3rd parties to which we do REST calls. When their response times increase, and we have a lot of traffic on our site, it is simply a matter of not having enough open network connections to do another REST call. For example, if we have 10.000 users and the average response time is 10 seconds to our 3rd party, then we're effectively using up 10.000 connections. If another comes in and the limit is reached, that request is in AspNetReqQueued for 10 seconds. – Razzie Sep 27 '16 at 09:53
  • are you accessing those APIs in an asynchronous manner? If not, then your threads are just waiting for those responses instead of serving simple r requests. – AlexanderN Feb 28 '17 at 16:26

0 Answers0