Stellar WordPress performance
by Alain Fontaine on Jan.18, 2009, under Blogs, Technology
In one of my earlier posts, I explained how I setup Squid to accelerate a remote photo serving appliance that is connected to the Internet over a slow 512Kbit/s ADSL line. I am now using the same setup to accelerate my WordPress blog. The results are quite stunning. Read on to find out more and see some performance results…
The setup
Here are the basics of my setup :
- The hosting server is an OVH RPS virtual machine, probably one of the cheapest you can get in Europe. It has quite limited CPU, only 512MB of RAM, and 10GB of remote storage space that sits somewhere on a SAN that the machine connects to via iSCSI. It is running Debian Etch.
- Apache version 2, PHP 5, and MySQL 5. I have installed APC in its default setup to accelerate PHP processing. Apache is liseting on port 8080 so that Squid can listen on port 80, setup as a transparent caching proxy.
- I’m using WordPress version 2.7 with the WordPress Super Cache plugin installed.
Testing performance
To test the web serving performance, I use Apache Bench (ab) to send a bunch of requests to my blog. While this is still a pretty limited way of testing performance, it gives a good overview.
Here’s the command I use to test the performance without using Squid. I specify ab to connect to port 8080 which is the port Apache is listening to, as so :
ab -c 10 -n 500 http://www.alainfontaine.lu:8080/blog/2009/01/
This send 500 requests to the archive page, using 10 concurrent connections. The results are as follows:
Connection Times (ms)
min mean[+/-sd] median max
Connect: 53 73 12.1 72 113
Processing: 119 619 323.1 468 1876
Waiting: 119 616 323.3 466 1875
Total: 177 692 323.2 538 1970
Percentage of the requests served within a certain time (ms)
50% 538
66% 569
75% 632
80% 717
90% 1281
95% 1326
98% 1440
99% 1891
100% 1970 (longest request)
What do these results tell?
- “On average” (median), fully downloading that page takes 538 miliseconds.
- 90% of the requests are done in 1281 ms or less.
These results are not so bad. Let’s see how it performs using the Squid now. The command I use is :
ab -c 10 -n 500 http://www.alainfontaine.lu/blog/2009/01/
Note that I don’t specify the port number here, which means that it defaults to port 80, on which Squid is listening. Here are the results:
Connection Times (ms) min mean[+/-sd] median max Connect: 55 115 231.6 99 3089 Processing: 253 339 45.7 336 606 Waiting: 58 100 39.4 98 403 Total: 329 455 236.4 437 3439 Percentage of the requests served within a certain time (ms) 50% 437 66% 445 75% 450 80% 459 90% 478 95% 501 98% 682 99% 697 100% 3439 (longest request)
What does it mean ?
- The average is now down to 437 ms, a tad faster than before.
- But more impressively, it now takes 478 ms or less for 90% of the visitors to download the full page. Compared to the 1281 ms of before, this is more than twice as fast (actually almost three times as fast). That is a huge improvement.
Added bonus – the machine’s load average using Apache directly, is up to 2.3 as the system has to fork Apache processes for the concurrent connections. Using Squid, the machine load is barely above 0 thanks to the optimized HTTP connection handling. Actually, Squid is serving all of these requests directly out of memory :
1232287344.903 223 x.x.x.x TCP_MEM_HIT/200 22460 GET http://www.alainfontaine.lu/blog/2009/01/ - NONE/- text/html 1232287344.909 222 x.x.x.x TCP_MEM_HIT/200 22460 GET http://www.alainfontaine.lu/blog/2009/01/ - NONE/- text/html 1232287344.935 216 x.x.x.x TCP_MEM_HIT/200 22460 GET http://www.alainfontaine.lu/blog/2009/01/ - NONE/- text/html 1232287344.951 212 x.x.x.x TCP_MEM_HIT/200 22460 GET http://www.alainfontaine.lu/blog/2009/01/ - NONE/- text/html 1232287344.956 201 x.x.x.x TCP_MEM_HIT/200 22460 GET http://www.alainfontaine.lu/blog/2009/01/ - NONE/- text/html 1232287344.965 202 x.x.x.x TCP_MEM_HIT/200 22460 GET http://www.alainfontaine.lu/blog/2009/01/ - NONE/- text/html 1232287344.972 191 x.x.x.x TCP_MEM_HIT/200 22460 GET http://www.alainfontaine.lu/blog/2009/01/ - NONE/- text/html 1232287345.000 212 x.x.x.x TCP_MEM_HIT/200 22460 GET http://www.alainfontaine.lu/blog/2009/01/ - NONE/- text/html 1232287345.008 208 x.x.x.x TCP_MEM_HIT/200 22460 GET http://www.alainfontaine.lu/blog/2009/01/ - NONE/- text/html
Notice the TCP_MEM_HIT which shows that Squid serves the requested page directly out of RAM without even bothering Apache or the disk… and that also means that the Squid solution is much more scalable when traffic goes through the roof.
No related posts.
Related posts brought to you by Yet Another Related Posts Plugin.
-
atshoom
-
http://www.powertuneplus.com/ Josh Straub
-
http://www.wickerbenchstorage.net Wicker Bench Storage
-
http://www.webhostings.in/ web hosting company
-
http://www.findacellphoneuser.com/ reverse phone lookup