So this came up recently where a customer was asking if we could tune their apache2 for higher traffic. The best way to do this is to benchmark the site to double the traffic expected, this should be a good measure of whether the site is going to hold up..
# Use Apachebench to test the local requests
ab -n 1000000 -c 1000 http://localhost:80/__*index.html
Benchmarking localhost (be patient)
Completed 100000 requests
Completed 200000 requests
Completed 300000 requests
Completed 400000 requests
Completed 500000 requests
Completed 600000 requests
Completed 700000 requests
Completed 800000 requests
Completed 900000 requests
Completed 1000000 requests
Finished 1000000 requests
Server Software: Apache/2.2.15
Server Hostname: localhost
Server Port: 80
Document Path: /__*index.html
Document Length: 5758 bytes
Concurrency Level: 1000
Time taken for tests: 377.636 seconds
Complete requests: 1000000
Failed requests: 115
(Connect: 0, Receive: 0, Length: 115, Exceptions: 0)
Write errors: 0
Total transferred: 6028336810 bytes
HTML transferred: 5757366620 bytes
Requests per second: 2648.05 [#/sec] (mean)
Time per request: 377.636 [ms] (mean)
Time per request: 0.378 [ms] (mean, across all concurrent requests)
Transfer rate: 15589.21 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 52 243.0 22 15036
Processing: 0 282 1898.4 27 81404
Waiting: 0 270 1780.1 24 81400
Total: 6 334 1923.7 50 82432
Percentage of the requests served within a certain time (ms)
50% 50
66% 57
75% 63
80% 67
90% 84
95% 1036
98% 4773
99% 7991
100% 82432 (longest request)
# During the benchmark test you may wish to use sar to indicate general load and io
stdbuf -o0 paste <(sar -q 10 100) <(sar 10 100) | awk '{printf "%8s %2s %7s %7s %7s %8s %9s %8s %8s\n", $1,$2,$3,$4,$5,$11,$13,$14,$NF}'
# Make any relevant adjustments to httpd.conf threads
# diff /etc/httpd/conf/httpd.conf /home/backup/etc/httpd/conf/httpd.conf
103,108c103,108
< StartServers 2000
< MinSpareServers 500
< MaxSpareServers 900
< ServerLimit 2990
< MaxClients 2990
< MaxRequestsPerChild 20000
---
> StartServers 8
> MinSpareServers 5
> MaxSpareServers 20
> ServerLimit 256
> MaxClients 256
> MaxRequestsPerChild 4000
-----------------------------------
In this case we increased the number of startservers and minspareservers. Thanks to Jacob for this.