Review

VestaCP WordPress Upcloud: A Performance Review

Pinterest LinkedIn Tumblr

This article benchmarks the performance of VestaCP installed on a 1GB cloud server hosted by Upcloud. WordPress is employed to host content and images.

The benchmark simulates how a VestaCP server handles client requests per seconds. This also simulates how many visitors a WordPress website can get if hosted on a VestaCP server powered with only 1GB RAM and 1GB CPU.

Is a cloud or virtual server with VestaCP can handle thousands for unique visitors a day despite it has only 1GB RAM and 1 CPU? You can find out the answer below.

Benchmark Test Parameters

This performance test employs the following configurations:

Server:

I use a cloud server provided by Upcloud. I spun a cloud instance under its Simple Plans pricing. The cloud server comes with 1GB RAM, 1 CPU, 25GB SSD, and 3TB bandwidth. I chose to deploy the cloud server at San Jose DC.

Server specs and performance:

## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
 Yet-Another-Bench-Script
 v2019-10-08
 https://github.com/masonr/yet-another-bench-script
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
 Mon Dec 30 12:55:32 UTC 2019
 Basic System Information:
 Processor  : Intel(R) Xeon(R) Gold 6136 CPU @ 3.00GHz
 CPU cores  : 1 @ 2992.968 MHz
 AES-NI     : ✔ Enabled
 VM-x/AMD-V : ❌ Disabled
 RAM        : 985M
 Swap       : 0B
 Disk       : 25G
 Disk Speed Tests:
        | Test 1      | Test 2      | Test 3      | Avg    |
 Write  | 236.00 MB/s | 237.00 MB/s | 247.00 MB/s | 240.00 MB/s
 Read   | 420.35 MB/s | 420.40 MB/s | 420.56 MB/s | 420.44 MB/s

 iperf3 Network Speed Tests (IPv4):
 Provider                  | Location (Link)           | Send Speed      | Recv Speed
                           |                           |                 |
 Bouygues Telecom          | Paris, FR (10G)           | 819 Mbits/sec   | busy
 Online.net                | Paris, FR (10G)           | busy            | 1.29 Gbits/sec
 Severius                  | The Netherlands (10G)     | 771 Mbits/sec   | 770 Mbits/sec
 Worldstream               | The Netherlands (10G)     | 865 Mbits/sec   | 1.22 Gbits/sec
 wilhelm.tel               | Hamburg, DE (10G)         | 699 Mbits/sec   | 887 Mbits/sec
 Biznet                    | Bogor, Indonesia (1G)     | busy            | busy
 Hostkey                   | Moscow, RU (1G)           | 609 Mbits/sec   | 808 Mbits/sec
 Velocity Online           | Tallahassee, FL, US (10G) | 883 Mbits/sec   | 2.30 Gbits/sec
 Airstream Communications  | Eau Claire, WI, US (10G)  | busy            | busy
 Hurricane Electric        | Fremont, CA, US (10G)     | 906 Mbits/sec   | busy

 iperf3 Network Speed Tests (IPv6):
 Provider                  | Location (Link)           | Send Speed      | Recv Speed
                           |                           |                 |
 Bouygues Telecom          | Paris, FR (10G)           | 756 Mbits/sec   | 1.20 Gbits/sec
 Online.net                | Paris, FR (10G)           | 848 Mbits/sec   | 1.27 Gbits/sec
 Severius                  | The Netherlands (10G)     | 769 Mbits/sec   | 703 Mbits/sec
 Worldstream               | The Netherlands (10G)     | 860 Mbits/sec   | 1.23 Gbits/sec
 wilhelm.tel               | Hamburg, DE (10G)         | 684 Mbits/sec   | 1.08 Gbits/sec
 Airstream Communications  | Eau Claire, WI, US (10G)  | busy            | busy
 Hurricane Electric        | Fremont, CA, US (10G)     | 884 Mbits/sec   | busy

Geekbench 4 Benchmark Test:
 Test            | Value
 Single Core     | 4110
 Multi Core      | 3962
 Full Test       | https://browser.geekbench.com/v4/cpu/15087327

Webserver, MySQL, and PHP:

I installed VestaCP on Ubuntu 18.04.3 LTS. There is no special configuration just yet in the VestaCP configs. I use the Default package with following default setup:

  • Webserver: Nginx v1.17.7 (proxy) + Apache v2.4.29 (backend).
  • MySQL server v5.7.28-0ubuntu0.18.04.4.
  • PHP v7.2.24-0ubuntu0.18.04.1 (cli)
  • No HTTP2
  • Default Gzip compression (no Brotli)
  • DNS server (yes, no third-party DNS hosting)
  • and some other standard services (firewall, fail2ban, Exim, Dovecot, etc).

WordPress setup:

WordPress is employed to serve content to the users (or visitors). Following configs are used:

  • WP version 5.3.2
  • 11 posts in total (including Hello World)
  • All articles have images (except Hello World)
  • The free version of GeneratePress theme is used.
  • 4 active plugins (Autoptimize, Cache Enabler, Really Simple SSL, and WP Cerber).
  • Domain: speedy.monster registered at Namesilo.
  • Page tested: Main index page (home page).

Caching setup:

Website caching is done by two plugins: Autoptimize and Cache Enabler.

A. Autoptimize configs:

  • JavaScript optimized, aggregated
  • CSS optimized, aggregated
  • HTML code optimized
  • Save aggregated script/CSS as static files? Yes
  • Lazy-load images? Yes
  • Remove emojis? Yes
  • Remove query strings from static resources? Yes

B. Cache Enabler configs:

The Cache Enabler plugin is simply activated with no additional configs. Cache Minification option is also disabled because it was done through Autoptimize.

Test Parameters:

The parameters used to benchmark the performance of VestaCP server are:

  • Page load speed – Tools: Pingdom and GTMetrix.
  • Time To First Byte (TTFB) – Tools: GTMetrix and KeyCDN
  • Number of clients/visitors – Tool: Loader.io free plan

Benchmark Results

I show you the results as screenshot pics. Feel free to click on images to view the larger versions.

1. Page Speed Test

Pingdom Page Speed Test

Pingdom ranks our site as Grade A with 98 points. The tested page loads in 126 ms with a total of 17 requests.

The server response header received by Pingdom.

GTmetrix Website Speed Test

The following settings are used in GTmetrix:

  • Browser: Google Chrome (Desktop) v75.0.3770.100
  • Test server region: Vancouver, Canada
  • Connection mode: off/default
  • Adblock: off
  • Onload: off
  • Video: off

Page load speed result:

The Performance Scores generated by GTmetrix test seems impressive. The Google PageSpeed score is A (100%) and the YSlow Score is A (96%).

The page loading time is slightly longer than what Pingdom shows (478ms vs 126ms). Nevertheless, the page loads in under 1 second. Impressive isn’t it?

Let’s dive in a little bit:

The website scores almost perfectly in the Google PageSpeed test. In the YSlow test, the absence of CDN is the only factor degrading its performance.

Now, take a look at the Waterfall section. This shows how each component of the site performs. The picture depicts that the generate press’ font file (.woff2) is the asset with the longest load time.

The header response shows similar result has what Pingdom delivers. It is clearly served over HTTP1.1 protocol (no HTTP2 yet).

KeyCDN Tools: Website Speed Test

Keycdn has its own tool to measure page speed. The result is similar to what GTmetrix shows. The total time needed to load the page is 485.1 ms. That’s a half of second.

2. Time To First Byte

Time to First Byte (TTFB) is the total amount of time spent to receive the first byte of the response once it has been requested. It is the sum of “Redirect duration” + “Connection duration” + “Backend duration“. This metric is one of the key indicators of web performance.

In a nutshell, TTFB is the time it takes from when a client makes an HTTP request to it receiving its first byte of data from the webserver.

GTmetrix Page Load Timings:

It takes only 121ms for the server to deliver the first byte of the website.

KeyCDN Performance Test:

The performance test tool is made to perform a web performance test that analyzes the load times of a single web asset. We use this test to access the main homepage (index.php) and to see how it goes.

The table depicts different performance across different locations. The fastest TTFB is 58.1 ms (San Fransisco, US) while the longest one is 938.2 ms (Bangalore, India).

3. Stress Load Test (Client Requests)

This test simulates a number of clients connecting or accessing the server together at a defined amount of time. Loader.io application load testing tool is employed.

I use the free plan of Loader.io which allows the following configurations: 10,000 clients/test and 1-minute test duration at max.

Test #1: 10,000 clients over 1 minute

Clients will be distributed evenly throughout the test duration. The test will answer this question: How does my server perform when 10000 users connect over the course of 1 minute?

Why 1 minute? Again, because that’s what Loader.io allows for a free plan. Nevertheless, we can do the math for the rest of the minutes.

It seems pretty easy for VestaCP with its Nginx+Apache configs to handle 10000 clients within 1 minute. Average response time is 87 ms which is great meaning that the server is still responsive with lo lagging.

The graph shows between 180-190 clients/second making an active connection to the server. There is no single 500 server error, no network error, and no timeout. The 10,000 visitors per minute is still a piece of cake for VestaCP to handle.

The Math: Given the 10,000 visitors the server can handle per minute, how many visitors would be per day? One day equals to 1,440 minutes. Multiply that by 10,000 and you’ll have 14,400,000 visitors/day. That gives you roughly 430M visitors a month.

Test #2: Clients per second over 1 minute

How far can it go? The next tests will answer the question or at least will simulate the closest number it gets to the maximal visitors the server can handle.

This test simulates a number of clients connecting to the server every second. The test will answer this question: How does my server perform when X number of users connect every second over 1 minute period?

The first attempt uses 200 clients per second and the result is as expected:

Average response time is 91ms (75ms min, and 872ms max). No timeout, no network error, and no single server error. The task seems easy for the server.

The second attempt uses 300 clients per second as the test config. Here’s the result:

Average response time is 269ms (75ms min, 7700 ms max). At 269ms usually, a server becomes sluggish. It is accessible but it performs slowly. No timeout but 2 network errors occur.

The graph shows significant loads at the beginning but it becomes responsive during the next 10 seconds when the number of clients steady at 300 clients/second.

The third attempt makes use of 350 clients per second. This could be the limit of the VestaCP server powered with a 1GB RAM and 1 CPU.

The result is interesting. Average response time increases significantly at 1805ms (112ms min, 10963ms max). There are 375 network errors and 16 timeouts. Instead of 350 clients per second, Loader.io sends 700 clients per second. The graph of response time fluctuates randomly. Hence, I can assume this is the limit.

Summary

In short, VestaCP is a powerful web hosting control panel. It’s free BTW. Default configs of VestaCP can deliver a powerful WordPress website to receive 14 million visitors a day or about 10K visitors/minute. The optimal numbers of visitors a cloud server with 1GB RAM and 1 CPU is 12K visitors/minute (200 visitors/sec). It can still handle more visits for up to 17K visitors/minute (300 visitors/sec) but the performance may slow down.

The number can increase if the cloud server is upgraded. Running VestaCP on a server with higher specs (more RAM, more CPUs) will obviously increase the performance of the VestaCP server.

Page load speed is impressive but this is not because of the server alone. The choice of themes and the caching plugin used also contribute to the performance.

Similarly the TTFB performance. TTFB under 500ms (a half-second) is impressive. Thanks to the server specification with good CPU, good IO, and good network connection. Kudos to UpCloud.

A blogger by hobby. He is an ordinary worker at day, a hybrid sys-admin at night. Sharing knowledge through blogs is his passion. He likes ice cream BTW.

Write A Comment