Post

Learning Notes #4 - Apache HTTP server benchmarking tool for Load Testing

Learning Notes #4 - Apache HTTP server benchmarking tool for Load Testing

{% raw %}

How i came across this Apache Bench aka AB tool ?

When i need to load test to check the rate limiting in my previous blog on Gatekeeper Cloud Pattern, i was searching a new tool to load test. Usually i prefer Locust, but this time i wanted to search new tool. That’s how i came across ab .

Apache Bench

Apache Bench (ab) is a simple and powerful command-line tool for performance testing web servers. It helps developers measure the performance of HTTP services by simulating multiple requests and analyzing the results.

In this blog, we’ll cover everything you need to get started, with examples for various use cases which i tried.

0. Output

Server Software:        Werkzeug/3.1.3Server Hostname:        localhostServer Port:            8090Document Path:          /Document Length:        16 bytesConcurrency Level:      10Time taken for tests:   2.050 secondsComplete requests:      2000Failed requests:        0Total transferred:      378000 bytesHTML transferred:       32000 bytesRequests per second:    975.61 [#/sec] (mean)Time per request:       10.250 [ms] (mean)Time per request:       1.025 [ms] (mean, across all concurrent requests)Transfer rate:          180.07 [Kbytes/sec] receivedConnection Times (ms)              min  mean[+/-sd] median   maxConnect:        0    0   0.0      0       1Processing:     2   10   2.3     10      37Waiting:        2   10   2.2     10      37Total:          3   10   2.3     10      37

It gives a detailed output on time taken, data transferred and other stress details.

1. Basic Load Testing

To send 100 requests to a server with 10 concurrent connections

ab -n 100 -c 10 http://example.com/
  • -n 100 : Total 100 requests.
  • -c 10 : Concurrent 10 requests at a time.
  • http://example.com/: The URL to test.

2. Testing with POST Requests

For testing POST requests, we can use the -p option to specify the data file and -T to set the content type.

ab -n 50 -c 5 -p post_data.txt -T "application/x-www-form-urlencoded" http://example.com/api
  • -p post_data.txt – File containing POST data.
  • -T "application/x-www-form-urlencoded" – Content type of the request.

3. Testing with Custom Headers

To add custom headers to your request

ab -n 100 -c 20 -H "Authorization: Bearer <token>" http://example.com/api
  • -H "Authorization: Bearer <token>" – Adds an Authorization header.

4. Benchmarking with Keep-Alive

By default, ab closes the connection after each request. Use -k to enable keep-alive

ab -n 500 -c 50 -k http://example.com/
  • -k Enables HTTP Keep-Alive.

5. Outputting Detailed Results

To write the results to a file for analysis

ab -n 200 -c 20 http://example.com/ > results.txt
  • > results.txt – Saves the results in a text file.

6. Configuring Timeout Values

To set a custom timeout,

ab -n 100 -c 10 -s 60 http://example.com/
  • -s 60: Sets a 60-second timeout for each request.

Apache Bench outputs key metrics such as

  • Requests per second: Average number of requests handled.
  • Time per request: Average time per request.
  • Transfer rate: Data transfer rate.

{% endraw %}

This post is licensed under CC BY 4.0 by the author.