Speed Up Your Web Site with Varnish
System Load and %iowait
System load is a measure of how much load is being placed on your CPU(s). As a general rule, you want the number to stay below 1.0 per CPU or core on your system. That means if you have a four-core system as in the machine I'm benchmarking here, you want your system's load to stay below 4.0.
%iowait is a measure of the percentage of CPU time spent waiting on input/output. A high %iowait indicates your system is disk-bound, performing many disk i/o operations causing the system to slow down. For example, if your server had to retrieve 100 files or more for each request, it likely would cause the %iowait time to go up very high indicating that the disk is a bottleneck.
The goal is to not only improve response times, but also to do so with as little impact on system resources as possible. Let's compare how a prolonged traffic surge affects system resources. Two good measures of system performance are the load average and the %iowait. The load average can be seen with the top utility, and the %iowait can be seen with the iostat command. You're going to want to keep an eye on both top and iostat during the prolonged load test to see how the numbers change. Let's fire up top and iostat, each on separate terminals.
Starting iostat with a two-second update interval:
iostat -c 2
Now you're ready to run the benchmark. You want ab to run long enough to see the impact on system performance. This typically means anywhere from one minute to ten minutes. Let's re-run ab with a lot more total requests and a higher concurrency.
Load testing Apache with ab:
ab -c 50 -n 100000 http://localhost/cgi-bin/test
Figure 6. System Load Impact of Traffic Surge on Apache
Load testing Varnish with ab:
ab -c 50 -n 1000000 http://localhost:6081/cgi-bin/test
Figure 7. System Load Impact of Traffic Surge on Varnish
First let's compare response times. Although you can't see it in the screenshots, which were taken just before ab finished, Apache came in at 23ms per request (2097 rps), and Varnish clocked in at 4ms per request (12099 rps). The most drastic difference can be seen in the load averages in top. While Apache brought the system load all the way up to 12, Varnish kept the system load near 0 at 0.4. I did have to wait several minutes for the machine's load averages to go back down after the Apache load test before load testing Varnish. It's also best to run these tests on a non-production system that is mostly idle.
Although everyone's servers and Web sites have different requirements and configurations, Varnish may be able to improve your site's performance drastically while simultaneously reducing the load on the server.
Web Development News
- Readers' Choice Awards 2013
- IBM Will Minimize Impact of Future Disasters
- December 2013 Issue of Linux Journal: Readers' Choice
- Sublime Text: One Editor to Rule Them All?
- RSS Feeds
- Raspberry Pi: the Perfect Home Server
- Tech Tip: Really Simple HTTP Server with Python
- Linux Systems Administrator
- New Products
- Senior Perl Developer
35 min 3 sec ago
- yes it's Jupiter Broadcasting
1 hour 54 min ago
- nice to see PClinuxOS finally
4 hours 28 min ago
- Personally, I am no longer a
5 hours 24 min ago
- Reply to comment | Linux Journal
18 hours 49 min ago
- It's Jupiter
19 hours 49 min ago
- GIMP is certainly a graphic
20 hours 51 min ago
- Thanks For Your Sharing
1 day 1 hour ago
- Studying linux, and looking
1 day 5 hours ago
- voting for Best Linux Distribution
1 day 13 hours ago