Drupal Association members fund grants that make connections all over the world.
When using the Apache benchmark utility (ab), what is a fair number of concurrent connections to test a Drupal install with?
I see most people testing with numbers around 5-10.
I can safely benchmark our server with concurrent connections up to around 40, but if I go higher, say in the hundreds, the server starts choking and will hang. The load averages start soaring and if I can't get get the Apache processes killed we end up having to reboot the server.
The reason I am testing with such high numbers is that we are having an issue where our server is coming to a standstill. We are not sure if it is being caused by load. However, we can duplicate it in a test environment by holding down F5 (refresh) in Firefox 3 or IE7 while we are browsing the site with caching turned off. If we are an authenticated user, the cache doesn't apply, and we can take the site down using a constant refresh. The constant refresh from the browser is triggering another connection on the server before the previous connection has ended. I can see this with Apache server-status as the processes are all working. I don't understand why this behavior occurs and how we can prevent it. What I do know is that with a plain vanilla Drupal install, it doesn't happen. However, once we throw our site on it and put the modules in, there is a bit more to process so things are naturally slower.
When we have the issue, the number of httpd processes increases up to the MaxClients setting in the preform mpm in Apache. The mysqld process eats up a lot of CPU, and we see a MySQL connection for each of the Apache processes. Most of those connections are sleeping (monitoring using MySQLadmin processlist). When checking the server-status page for Apache during these high loads, the processes are all W sending replies.
We lowered the MaxClients in the preform mpm in Apache to a number down around 40 (was default I think 256). That helps keep the server alive during these high loads, but the website suffers because the client browsers eventually timeout. However, it is a plus in that we don't have to power cycle the server.
Some things we have tried:
* RHEL 4, RHEL 5, Ubuntu 8
* MySQL 4 and 5
* PHP 4 and 5
* Accessing site locally from GUI on server using Firefox 3 (eliminating network)
* Apache KeepAlive on
* Hardware is Intel Xeon 2.4GHz HT w/ 4 GB RAM, RAID 0 SCSI (Dell PE2600)
We have also tried various other hardware for various flavors of Linux.
Any thoughts would be greatly appreciated. Thanks guys,