Performance Testing WordPress on Microsoft Azure

Over Christmas, I developed a set of performance tests against all the various hosting plans in Microsoft Azure using the basic Bakery ASP.NET application.  The results are published here.

In renovating this blog for 2015, I have started moving it to SQL Azure using the Brandoo WordPress Plugin for SQL Server and wanted to test the performance.  This gave me the opportunity to do the same performance test but with a more real world application – running a WordPress blog.  Here are the results.

Shared

Shared provides reasonable scalability but the quotas are quickly overloaded by WordPress.  With 4 concurrent users, I was able to disable the site by overloading the quotas.

Small

Using my earlier performance tests, I have concluded that Basic and Standard small essentially perform the same way.  With Standard, you have more scalability options but the basic VM performance is the same.

In the same as my previous tests, I found that Basic or Standard Small were too small to handle any serious load.  While they don’t break, with more than 8 concurrent users the response time becomes very slow at more than 5 seconds on average to respond to the request.

If you look at the Azure dashboard, it seems to be maxed out at 70-80 requests per minute.

image_thumb5

Medium

In our previous tests, Basic and Standard Medium did quite well.  They scaled nicely until about 50 concurrent users and then slowed down as the instance was overloaded.

In this WordPress test, scalability was improved over Small.  While Small peaked at 80 requests per minute, Medium peaked at 170 requests per minute.  However, performance degradation still occurred at 8 concurrent users although the drop wasn’t as significant as Small.  With Medium, performance with 20 concurrent users is still below 5 seconds under load per request.  However, with 50 users, that jumps to 17 seconds per request on average.

Large

As expected, Large performs really well and scales a lot better than Small or Medium.  It performs solidly at 8 concurrent users with only minor drop off in performance.  Even at 20 concurrent users, the average response time is still under 5 seconds.  At peak, the single instance is able to generate 575 requests per minute.

Shared x 3

Shared x 3 provides similar scalability to Shared which is rock solid.  However, you’re still up against quota limitations but they have been tripled because of the three instances.  This is particularly helpful with CPU time and memory usage in that WordPress seems to spike just above the memory threshold of 512 MB for a single instance from time to time when it is under load (it’s probably not WordPress but the  .NET run time accumulating garbage to be collected).  With 1.5 MB in memory usage available, WordPress sits comfortable within that threshold.

However, running more than 8 concurrent users will use up the available CPU time within 5 minutes and shut down the site, even with three instances running.  It can handle the surge in traffic better than a single Shared instance but it cannot handle a sustained load.

Medium x 3

Basic Medium x 3 provides very good scalability and superior performance to a single Standard Large server.  Given the cost of 3 Basic Mediums is $357 / month and a single Standard Large is $314 / month, you’re better to scale horizontally across Medium instances than go up to the Large instance.

Even at 50 concurrent users pounding away, the three Medium instances were still serving pages in under 5 seconds on average.   This is almost double the performance of the single Standard instance we tested above.

Large x 3

Basic Large x 3 can  handle a LOT of traffic.  It could easily handle 20 concurrent users at full speed with no degradation in performance.  With 50 users, we were still running less than 5 seconds for an average page request.  Even with 100 concurrent users, the response time was about 6 seconds per page load.

The site was able to peak at more than 1200 requests per minute – that’s about 1.7 million requests per day.

image_thumb6