Another place I personally purchased a VPS from to test out is Linode (http://linode.com). I've only had it for a week so far, but so far no problems. If you're going to run a Rails app, you might want to look at them as for $20 they provide 360MB of RAM instead of 256 :) Their community seems on par with Slicehost. Their Xen is in beta testing, though, so for now their VPS' run UML.
One thing I love about linode is that you get upgrades almost seamlessly. I rarely ever need to log into the main page, so when I do I end up find out out that my ram and available storage has increased. Since I started I think my storage has gone from 2g to 10g, and memory from I think 64m to 360m. (you have to grow your partition or create a partition to use the extra space, which is a small amount of downtime. It looks like using the extra memory requires a reboot, as I still only have 251864 kB, which suggests the 360m upgrade was within the last 171 days.)
I used a variety of virtual hosts before linode, with mixed results.
I haven't regretted going with linode for one moment. Period.
We hit the wall one day with a number of apache2 processes hitting the 60-80MB range. I could barely SSH in to fix things.
We ended up arriving empirically at the following (taken from /etc/apache2/apache2.conf), without stress testing, but watching patterns over several weeks.
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 3
MaxSpareServers 6
# MaxClients 150
MaxClients 10
# MaxRequestsPerChild 0
MaxRequestsPerChild 200
</IfModule>
The key is to take MaxClients down to a small number, like 8-10, as each of these normally takes anywhere from 2-40MB. To make this work, you'll need to have the request count set reasonably small. We set ours to 200, so RAM consumption doesn't get too large before the process is cycled. People often suggest 4000 or some such number but the process just grew too large with that setting. You'll also note that we have tuned the startup and idle parameters to be very conservative.This is probably a laughable configuration for many sites, but it works well for a light site like ours running a few PHP apps. I should note that we're also running MySQL and PostgreSQL. They don't have a big impact on RAM under light load.
RAM is by far the biggest bottleneck for me.
Overall, Slicehost is great. I just wish they'd include more RAM in their plans.
On my slice I have a few PHP sites, a few static sites and 4 RoR sites (most of which get very little traffic.) Overall about 30k page views a day.
Litespeed isn't open source, but it is free and it works great for my hosting.
Regardless, I'm running Lighttpd (10 work handlers using the same amount of RAM as 1 Apache handler), proftpd, MySQL 5, PHP5 via FastCGI, and sendmail. I've never dipped below 80MB RAM left and load times are extremely quick.
I've offloaded my email services to Google Apps, which has it's advantageous and disadvantageous.
The best experience I had with Slicehost was the upgrade from 256 to 512. It was a couple clicks on their admin panel, 30 minutes of downtime, and then a quick SSH to verify everything was good.
http://blog.notedpath.com/2008/02/10/using-jmeter-for-load-t...
http://www.perplexedlabs.com/2008/02/04/building-a-rails-cap...
for the same $19.99 linode has more bandwidth and memory and xen support. really, what we've realized is actually most expensive is the cpu cycles since our app would crash consistently because the shared resources peaked when we started stress testing. since then with better resource management, better apache fiddling, and a couple rewrites we're handling a peak loads of more than 2000 people and an average load of 500 people.
linode's documentation is somewhat lacking, i much prefer slicehost's wiki and forum for support but other than that we have a cluster of 4 or 5 linodes running and it's been great.