Need clarification on mongrel, rails, threads, and performance

My understanding is that:
1. rails is single threaded and serves one request at a time
2. mongrel is single threaded and can process one rails request at a
time
3. mongrel_cluster starts a few mongrel servers on the same machine

Based on this, the single most important factor becomes the time it
takes to load a single page (to avoid blocking).

If this is all true, what's considered a "good" page loading time?

Thank you.

My understanding is that:

  1. rails is single threaded and serves one request at a time

  2. mongrel is single threaded and can process one rails request at a

time

  1. mongrel_cluster starts a few mongrel servers on the same machine

Based on this, the single most important factor becomes the time it

takes to load a single page (to avoid blocking).

Agreed. Consider Passenger though (as it’s easier to manage than Mongrels) or JRuby if you want multi-threaded serving.

If this is all true, what’s considered a “good” page loading time?

That’s a “How long is a piece of string” type of question. I’d say aim for 50-100ms, but it absolutely depends on what you’re doing. As long as the speed of page load given the amount of servers and traffic you have is acceptable for your users then don’t worry about it.

Benchmark, measure, improve/accept rather than ask for opinions - it really is the only way.

Cheers,

Andy

I am trying to do some rough math:

Assuming 100ms per page, that's about 10 requests per second.
With 8 mongrels per cpu (based on suggestions on the web), that's 80
requests per second.

This seems like a very low request/second per machine.
How are people getting 1000 or so requests per second? Is my math
wrong?

What the average overhead by mongrel for cpu and ram?

Thank you.

I am trying to do some rough math:

Assuming 100ms per page, that’s about 10 requests per second.

With 8 mongrels per cpu (based on suggestions on the web), that’s 80

requests per second.

I’d say 100ms should be the upper end, you’d want to be aiming for much faster than that but anyway.

This seems like a very low request/second per machine.

How are people getting 1000 or so requests per second? Is my math

wrong?

High performance sites generally tend to use a lot of caching. Rails has a lot of caching mechanisms built in - page caching, partial caching, generic caching.

What the average overhead by mongrel for cpu and ram?

No idea, I use Passenger. The overhead for Passenger is hard to determine, but my clients are happy with the performance so that’s what counts.

The best bet might be to see what percentage of your hits are to the homepage and each internal page type. Then setup a JMeter profile to hit pages in that ratio and see what you get. You can then try tweaking and caching. But find out your numbers before worrying about it - don’t guess at performance, measure!

Cheers,

Andy