I am trying to determine what/where my problems are when running my app under load. The app is using Blazor and Entity Framework, written in C# and is running on Azure app server using Azure SQL Database.
My initial testing, using JMeter, The GET user search for events (I think this is the request with the highest resource usage):
At 50 users the average response time was 1100ms. The min was 67ms, and the max was 6554ms. Std Dev was 1649ms.
At 35 users the average response time was 446ms. The min was 67ms, and the max was 1301ms. Std Dev was 295ms.
At 25 users the average response time was 336ms. The min was 71ms, and the max was 1536ms. Std Dev was 333ms.
At 10 users the average response time was 261ms. The min was 68ms, and the max was 1069ms. Std Dev was 265ms.
How do I now profile this to find out what is slowing things down, and why. Or to put it another way, how do I profile this to have it tell me what is taking longer under high load? The possibilities I think are:
- Database queries.
- IIS (app server).
- BLOB reads – this is URLs inserted in the rendered page. Does JMeter wait until all images on the page have been read?
- My code (not counting SQL queries).
How can I profile this? The best I’ve thought of is three things:
- Significantly increase the compute resources for the SQL Database and run again.
- Significantly scale up the app server and run again.
- Significantly scale out the app server and run again.
Is there a better way to profile? Preferably one that returns specific issues such as which SQL select is the most problematic, that if BLOB reads are an issue, which reads, etc.?
I know this is sort-of a broad question. But it fundamentally is very specific – how do I profile a web app under load running on Azure?