# Load Testing ## Apache Bench This tool will allow us to test a webpage with any number of requests at any number of concurrent connections. It's powerful and easy to use. ### Setup 1. Don't run Apache Bench on the local host 2. Reduce network latency by using a server in the same locale 3. Ensure you are monitoring web server performance live using monitoring tools (for Apache see below) ### Running Run 300 test with up to 40 concurrent requests at a time: `ab -n 300 -c 40 http://www.jordansavant.com/` ```text Server Software: AmazonS3 Server Hostname: www.jordansavant.com Server Port: 80 Document Path: / Document Length: 0 bytes Concurrency Level: 40 Time taken for tests: 1.045 seconds Complete requests: 300 Failed requests: 0 Non-2xx responses: 300 Total transferred: 86700 bytes HTML transferred: 0 bytes Requests per second: 287.00 [#/sec] (mean) Time per request: 139.375 [ms] (mean) Time per request: 3.484 [ms] (mean, across all concurrent requests) Transfer rate: 81.00 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 48 58 4.3 58 70 Processing: 49 63 16.9 58 244 Waiting: 49 61 16.5 57 244 Total: 103 121 16.9 117 294 Percentage of the requests served within a certain time (ms) 50% 117 66% 119 75% 125 80% 127 90% 133 95% 142 98% 165 99% 171 100% 294 (longest request) ``` ### Keep Alive You can pass the `-k` option to the test to send a "KeepAlive" header in the requests. This header is sent by browsers and is used to improve performance by keeping the TCP connection alive for followup requests. This prevents the time it takes to establish new connections for each request. How this affects the test is that the KeepAlive header means that your webserver will be reusing the same connection across each request and therefore more processing will be spent on the page performance and less on the connection handshakes. This is a good test for actual web traffic. `ab -k -n 100 -c 20 http://www.jordansavant.com`