loading...

Useful Tools: ApacheBench (ab)

matthias profile image Matthias 🤖 ・4 min read

Website: https://httpd.apache.org/docs/2.4/programs/ab.html

ApacheBench (ab) is a command line application for bench marking your web application. It was originally developed to test the Apache HTTP server but it is not limited to it — you can use the tool to test any web server.

Installation

ApacheBench (ab) is bundled in the apache2-utils package.
You can install it on Debian/Ubuntu platforms with apt-get install -y apache2-utils.
If you're on a macOS powered system, ab is already installed, because macOS ships with Apache HTTP server.

Usage

Suppose we want to see how fast example.com can handle 100 requests (-n 100), with a maximum of 10 requests (-c 10) running concurrently.

ab -n 100 -c 10 https://example.com/

ApacheBench (ab) will then generate the following output:

Server Software:        ECS
Server Hostname:        example.com
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128
Server Temp Key:        ECDH P-256 256 bits
TLS Server Name:        example.com

Document Path:          /
Document Length:        1256 bytes

Concurrency Level:      10
Time taken for tests:   4.990 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      160293 bytes
HTML transferred:       125600 bytes
Requests per second:    20.04 [#/sec] (mean)
Time per request:       499.031 [ms] (mean)
Time per request:       49.903 [ms] (mean, across all concurrent requests)
Transfer rate:          31.37 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      309  339  18.4    338     383
Processing:   100  108   6.3    106     129
Waiting:       99  106   6.2    104     124
Total:        410  447  22.1    446     511

Percentage of the requests served within a certain time (ms)
  50%    446
  66%    453
  75%    459
  80%    463
  90%    479
  95%    488
  98%    505
  99%    511
 100%    511 (longest request)

You can get some really useful information from it.

Complete requests:      100
Failed requests:        0

These two lines tell us, that not a single request failed. Which in fact means, that your setup is capable of serving this amount of requests.

Requests per second:    20.04 [#/sec] (mean)
Time per request:       499.031 [ms] (mean)
Time per request:       49.903 [ms] (mean, across all concurrent requests)

This part gives us information on the number of requests per second your application was able to fulfil.

Requests per second gives you an idea of how well your web application is performing. The larger the number, the better the performance.

Time per request (mean) tells you the average amount of time it took for a concurrent group of requests to process (so in our case 10 requests took 499.031ms).

Time per request (mean, across all concurrent requests) tells you the average amount of time it took for a single request to process.

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      309  339  18.4    338     383
Processing:   100  108   6.3    106     129
Waiting:       99  106   6.2    104     124
Total:        410  447  22.1    446     511

These figures show you the component breakdown of each request.

Connect gives you information about the time it took to establish connection with your server (which is most typically the network latency).

The Processing time is the total amount of time the web application took to process and send a complete response.

Waiting is the time-to-first-byte after the request was sent.

Alternatives to ApacheBench (ab)

  • Apache JMeter: Apache JMeter is a Java based application for analyzing and measuring the performance of web applications. As opposed to ApacheBench, JMeter has a GUI to create load test scenarios. JMeter supports variable parameterization, assertions (response validation), plugins, configuration variables and report generation. Apart from the outdated GUI, JMeter is in any case a very good (and free) tool for creating complex load test scenarios.

  • loadtest: loadtest is an easy to use, Node.js based alternative to ApacheBench (ab).

  • weighttp: weighttp is a lightweight and small benchmarking tool for web servers. I've never used it, though.

  • artillery: Artillery is a Node.js based load-testing toolkit. Artillery allows you to test HTTP, Socket.io, WebSockets, and AWS Kinesis. You can also emulate complex user behaviour. There is also a paid version to run distributed load tests. Unfortunately I cannot give you any further information or insights, because I did not used Artillery yet.

Conclusion

I hope you find this article useful and you give ApacheBench (ab) a try.
In my opinion it is a great tool for quickly load testing your web application. If you know how to use it, you get useful results and metrics on how your web application performs.


If you like my content, you might want to follow me on Twitter?! @fullstack_to

Posted on by:

matthias profile

Matthias 🤖

@matthias

👨‍💻 Software Engineer 🚀 Working on all stacks 🏷️ #typescript #react #docker #kubernetes #devops #cloud #webdev

Discussion

markdown guide
 

I very much recommend writing your own ab as a programming excercise. I did and had a lot of fun: github.com/katafrakt/locust

 

I couldn't find out, how ApacheBench can be installed on Windows. If anyone knows, please share and I will update my article.

 

I haven't used Windows in ages but as far as I remember, it comes as a binary in ZIP file with Apache server files, which you can download for example here: apachelounge.com/download/