Archive for October, 2009
Optimising LiteSpeed Web Server: 30 seconds to less than 1 second
I chose to use the LiteSpeed Web Server over Apache HTTP Server because of the low memory footprint, as well as better performance for PHP. The GUI admin interface is also a big plus point, making it easy to administer the server.
As I was adding sites and working to bring them online, I realised that my sites were loading very slowly. I installed WP Tuner, a WordPress plugin, to try and see if the bottleneck was on LiteSpeed or MySQL. From the statistics, the delay occurred at the very first “Start” marker, taking 30 seconds, or even as long as 60 seconds. This wasn’t a problem with MySQL then. Next, I used top to monitor CPU and memory usage. It turns out that each PHP process took up 20MB of memory. With a VPS of only 128MB memory, and each site load using multiple processes, this was a huge problem. I was quickly running out of memory, and there was a lot of swapping. A quick search on Google, and I found this page of documentation, which states:
There are two ways to let PHP handle multiple requests concurrently, Server Managed Mode and Self Managed Mode. In Server Managed Mode, LiteSpeed web server dynamically spawn/stop PHP processes, in this mode “Instances” should match “Max Connections” configuration for PHP external application. To start PHP in Self Managed Mode, “Instances” should be set to “1″, while “LSAPI_CHILDREN” environment variable should be set to match the value of “Max Connections” and >1. Web Server will start one PHP process, this process will start/stop children PHP processes dynamically based on on demand. If “LSAPI_CHILDREN” <=1, PHP will be started in server managed mode.
Self Managed Mode is preferred because all PHP processes can share one shared memory block for the opcode cache.
Webhosts come and go
This is a very important lesson: Webhosts come and go. One commonly-cited criteria for a good webhost is how long it has been in business. This, however, is hardly fool-proof. I had been with my previous host since 2003, I believe, which is six years or so of hosting. Two weeks ago, the server my website was on went down, and stayed down. No replies to tickets, no live chat, no answers to their phone (see this thread on WebHostingTalk). There were tell-tale signs of its impending doom: even before this incident, the server had gone down for one to two days at a time, and my tickets were not getting responded to. But I’d been lazy (and caught up with real life), and neglected to making a backup of my hosting account. My last full backup was from May, five months ago.
On the positive side, I am now a proud owner of a VPS. I decided to go with a VPS because I loved the flexibility and customisability of a VPS, and not be tied down to the quirks and limitations of shared hosting. A dedicated server is way over budget, so I decided to go with a small, cheap VPS instead. After much reading up, I decided to sign up with RapidXen, and purchased a 128MB VPS. Since I had a coupon for 20% off, I decided to get a slightly higher spec’ed VPS, 128MB RAM with 384MB swap and 10GB disk space.
Over the past few days, I have had fun setting up my VPS, and have just put this website back online (though restored from the May backup). Setting up a VPS requires Linux knowledge though, so this is definitely not for a Linux-newbie. There are a quite a few guides, and I found these particularly useful:
- Yes, You Can Run 18 Static Sites on a 64MB Link-1 VPS, an article on LowEndBox, which shows some steps for optimising memory usage on a VPS.
- Reducing MySQL Memory Usage for Low End Boxes, also from LowEndBox, on how to reduce MySQL memory usage.
- Debian VPS configuration and setup, from usefuljaja.com, with a quick-start on setting up and securing a clean VPS.
- Litespeed tutorials, also from usefuljaja.com, which has many detailed, step-by-step instructions on setting up Litespeed web server.
The VPS seems to be running well at the moment, and I hope this will be a long-term host