Conventions:

  1. Target machine – a machine which is being benchmarked
  2. Host machine – a machine from where benchmark is initiated

Note:

  • We can use same machine as target and host machine.
  • We can run benchmark from multiple “host machines”. In facts more is better.

Install apachebench (apache2-utils)

Following command will install apachebench (ab command). Run it on host machine from where test is conducted.

apt-get install apache2-utils

Run “htop” on target machine

Install htop if its not installed already.

apt-get install htop

Then simply run htop in a dedicated window/terminal.

Running Apachebench

Following example will run apachebench on example.com:

ab -n 10000 -c 10000 http://example.com/
  • n = number of total requests
  • c = number of concurrency (yep, this is same concurrency c10k problem refers to)

Sample output

Following is sample apachebench output:

This is ApacheBench, Version 2.3 <$Revision: 1430300

gt; Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking example.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: nginx Server Hostname: example.com Server Port: 80 Document Path: / Document Length: 109988 bytes Concurrency Level: 10000 Time taken for tests: 37.977 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Total transferred: 1104220000 bytes HTML transferred: 1099880000 bytes Requests per second: 263.31 [#/sec] (mean) Time per request: 37977.351 [ms] (mean) Time per request: 3.798 [ms] (mean, across all concurrent requests) Transfer rate: 28394.29 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 159 336 92.2 349 481 Processing: 1645 29446 12975.7 36427 37459 Waiting: 155 1029 1972.4 554 8900 Total: 2125 29782 12938.1 36704 37890 Percentage of the requests served within a certain time (ms) 50% 36704 66% 37003 75% 37104 80% 37159 90% 37401 95% 37527 98% 37618 99% 37709 100% 37890 (longest request)

Interpreting Results

Out of all tools I have used apachebench is most unfriendly.

Failed Request Count

First, you can ignore length-related “Failed requests” count. HTTP headers can change response length for replies.

Percentage of the requests served within a certain time (ms)

If you are subjecting your server to unrealistic load, you should bother for 90% requests.