I have a Drupal site that may receive a very high hit rate on launch. We've rented a very beefy server for the initial launch, after which we'll downscale. The server has a Xeon E5-2670 8 core processor @ 2.6ghz and 30gb of RAM.
MySQL has been given tonnes of memory, and I've confirmed that MySQL is actually using that memory through "top":
innodb_buffer_pool_size = 15G
PHP has been given tonnes of memory (almost certainly too much now that I notice the comment saying "per script"):
memory_limit = 6000M
The Apache config is the out of the box default:
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
I've been running JMeter testing (basically "throw as many threads as possible at the site and request pages as fast as possible") and I can see performance dropping as the number of concurrent users increases:
- 5 users: ~1s avg response time
- 10 users: ~1.3s avg response time
- 20 users: ~2.5s avg response time
However, load on the machine is still very low. During testing "top" reports 26gb of memory free, and the load average from "uptime" doesn't go above 0.63. My suspicion is that we still have a lot of resources we could be throwing at performance, but Apache isn't making full use of those resources. That said, I'm a developer and not a sysadmin, and I'm not an expert with server performance.
What is the best improvement I can make to improve performance?