I'm in the situation where a website is going to have a high number of web users and a few backend webmasters.

Webmasters will upload images (+other high mem tasks) and this bumps up the memory allocation of the httpd child processes to 100-150mb. In order to stop swapping I'm currently setting MaxClients in httpd.conf to 20. However this lowers maximum simultaneous requests. Will this be a problem when the website goes live?

What is the best configuration?

Info: Drupal 6, PHP 5, Apache 2.2 (Prefork atm)

I'm thinking about Worker MPM, two apache instances or low MaxRequestsPerChild.

1 Answer 1


The fact is, nobody knows what the best configuration is for your own setup, but there are some guidelines you can use to find it. The book "Building Scalable Web Sites" addresses this pretty thoroughly.

First you need to state what level of service is acceptable. For instance to accommodate 10 concurrent users, with 90th percentile page load times of less than a second with 99.99% uptime.

Then benchmark to figure out how many users you can currently accommodate. If you can't meet your goals (as stated above), you either need optimizations (takes your time) or more hardware (takes your (boss') money). Also, know that the gains from optimizations diminish as you spend more time on them. When tweaking application settings, aim for low hanging fruit. Then move on. At some point you need more/faster hardware.

With Drupal, migrating to Pressflow, Varnish, Memcache, and APC, are your big optimizations. I would do that first.

Also have a look at your architecture and make sure it's able to scale. You should be able to add more web servers to the cluster if you need to.

Hope this helps.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .