Title photo
frugal technology, simple living and guerrilla large-appliance repair
Mon, 23 Mar 2015

Test your (or any) web site’s availability with Apache’s ab utility

Buried in this blog post is a great tip: Using the Apache web server utility ab to determine web site availability and speed.

Definitely check out the post (which is about hosting static sites on Amazon S3), and if you are interested, install ab, which comes bundled for Debian/Ubuntu-style Linux systems in apache2-utils and for Fedora/RHEL/CentOS-style systems in httpd-tools.

The article linked above gives you the command to install apache2-utils in Ubuntu/Debian, and I could provide a similar yum command for Fedora/CentOS, but you probably already know how to install packages both from the command line and a GUI, right?

(I'm not sure how you'd get the Apache utilities in Mac OS X or Windows -- maybe someone else knows.)

Once you have the appropriate package installed (I already had it and didn't even know it), you just run the ab program from a terminal. This line hits my site with 1,000 requests:

$ ab -n 1000 -c 40 http://stevenrosenberg.net/blog

And the output is:

This is ApacheBench, Version 2.3 <: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking stevenrosenberg.net (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        nginx/1.6.2
Server Hostname:        stevenrosenberg.net
Server Port:            80

Document Path:          /blog
Document Length:        309 bytes

Concurrency Level:      40
Time taken for tests:   4.828 seconds
Complete requests:      1000
Failed requests:        0
Non-2xx responses:      1000
Total transferred:      530000 bytes
HTML transferred:       309000 bytes
Requests per second:    207.14 [#/sec] (mean)
Time per request:       193.109 [ms] (mean)
Time per request:       4.828 [ms] (mean, across all concurrent requests)
Transfer rate:          107.21 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       71   82  32.9     76    1077
Processing:    76  106  31.6     96     431
Waiting:       76  105  29.9     96     282
Total:        148  188  46.7    182    1157

Percentage of the requests served within a certain time (ms)
  50%    182
  66%    189
  75%    199
  80%    209
  90%    232
  95%    259
  98%    283
  99%    312
 100%   1157 (longest request)

That's a pretty useful utility, am I right?

Note: So how did Ode do in this test? Very well. The site carries Javascript for Disqus and the Twitter and Google Plus counters, so it's not as light as it could be, and the speeds are no slower than for my entirely static sites on this same shared-hosting server.

And it also shows that Ode can easily handle 1,000 simultaneous requests. Not bad at all.