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.