Inspired by https://gist.github.com/josevalim/1582864
Ubuntu 12.04
Linux citadel 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
- 12G of DDR3 RAM (@ 1033MHz)
- 16 cores (E5530 @ 2.40GHz)
- go 1.1.2
$ ab -n 10000 -c 40 http://127.0.0.1:3333/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (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:
Server Hostname: 127.0.0.1
Server Port: 3333
Document Path: /
Document Length: 12 bytes
Concurrency Level: 40
Time taken for tests: 1.470 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 1090000 bytes
HTML transferred: 120000 bytes
Requests per second: 6803.56 [#/sec] (mean)
Time per request: 5.879 [ms] (mean)
Time per request: 0.147 [ms] (mean, across all concurrent requests)
Transfer rate: 724.21 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 1
Processing: 1 6 0.8 6 12
Waiting: 1 6 0.8 6 12
Total: 2 6 0.8 6 12
Percentage of the requests served within a certain time (ms)
50% 6
66% 6
75% 6
80% 6
90% 7
95% 7
98% 7
99% 8
100% 12 (longest request)
- ruby 1.9.3p194
- sinatra-synchrony 0.4.1
$ ab -n 10000 -c 40 http://127.0.0.1:3050/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (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: thin
Server Hostname: 127.0.0.1
Server Port: 3050
Document Path: /
Document Length: 18 bytes
Concurrency Level: 40
Time taken for tests: 4.521 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Non-2xx responses: 10000
Total transferred: 2780000 bytes
HTML transferred: 180000 bytes
Requests per second: 2212.11 [#/sec] (mean)
Time per request: 18.082 [ms] (mean)
Time per request: 0.452 [ms] (mean, across all concurrent requests)
Transfer rate: 600.55 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 14 18 3.0 16 48
Waiting: 11 14 2.9 12 44
Total: 14 18 3.1 16 48
Percentage of the requests served within a certain time (ms)
50% 16
66% 21
75% 21
80% 21
90% 22
95% 22
98% 22
99% 22
100% 48 (longest request)
- Oracle JDK 1.7.0_25
- JRuby 1.7.4 (1.9.3p392)
- Trinidad 1.4.5 (tomcat 7 container)
This is much simpler than above, looks like:
require 'sinatra'
get '/' do
"Hello World"
end
$ ab -n 10000 -c 40 http://127.0.0.1:4567/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (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: Apache-Coyote/1.1
Server Hostname: 127.0.0.1
Server Port: 4567
Document Path: /
Document Length: 11 bytes
Concurrency Level: 40
Time taken for tests: 1.473 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 2670000 bytes
HTML transferred: 110000 bytes
Requests per second: 6789.92 [#/sec] (mean)
Time per request: 5.891 [ms] (mean)
Time per request: 0.147 [ms] (mean, across all concurrent requests)
Transfer rate: 1770.42 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.3 0 4
Processing: 1 6 4.2 4 26
Waiting: 1 6 4.2 4 26
Total: 1 6 4.2 4 26
Percentage of the requests served within a certain time (ms)
50% 4
66% 6
75% 8
80% 9
90% 12
95% 15
98% 18
99% 20
100% 26 (longest request)
- node 0.10.15
- express 3.3.5
$ ab -n 10000 -c 40 http://127.0.0.1:3000/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (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:
Server Hostname: 127.0.0.1
Server Port: 3000
Document Path: /
Document Length: 11 bytes
Concurrency Level: 40
Time taken for tests: 2.329 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 1690000 bytes
HTML transferred: 110000 bytes
Requests per second: 4292.96 [#/sec] (mean)
Time per request: 9.318 [ms] (mean)
Time per request: 0.233 [ms] (mean, across all concurrent requests)
Transfer rate: 708.51 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 4 9 1.6 9 24
Waiting: 3 9 1.6 9 24
Total: 5 9 1.6 9 24
Percentage of the requests served within a certain time (ms)
50% 9
66% 9
75% 9
80% 10
90% 11
95% 12
98% 14
99% 17
100% 24 (longest request)
- Erlang R16B01
- Elixir 0.10.2-dev
- Dynamo HEAD
$ ab -n 10000 -c 40 http://127.0.0.1:3030/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (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:
Server Hostname: 127.0.0.1
Server Port: 3030
Document Path: /
Document Length: 12 bytes
Concurrency Level: 40
Time taken for tests: 0.439 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 1560000 bytes
HTML transferred: 120000 bytes
Requests per second: 22798.21 [#/sec] (mean)
Time per request: 1.755 [ms] (mean)
Time per request: 0.044 [ms] (mean, across all concurrent requests)
Transfer rate: 3473.16 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.1 1 2
Processing: 0 1 0.2 1 4
Waiting: 0 1 0.2 1 4
Total: 1 2 0.3 2 5
Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 2
80% 2
90% 2
95% 2
98% 3
99% 3
100% 5 (longest request)
- Oracle JDK 1.7.0_25
- Scala 2.10.2
- Scalatra 2.2.1
NB: I imagine there are faster Scala frameworks, or I did something wrong...
$ ab -n 10000 -c 40 http://127.0.0.1:8080/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (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: Jetty(8.1.8.v20121106)
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /
Document Length: 11 bytes
Concurrency Level: 40
Time taken for tests: 16.145 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 1220000 bytes
HTML transferred: 110000 bytes
Requests per second: 619.37 [#/sec] (mean)
Time per request: 64.581 [ms] (mean)
Time per request: 1.615 [ms] (mean, across all concurrent requests)
Transfer rate: 73.79 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 2
Processing: 2 64 40.7 55 260
Waiting: 1 63 40.4 53 250
Total: 2 64 40.7 55 260
Percentage of the requests served within a certain time (ms)
50% 55
66% 74
75% 88
80% 97
90% 124
95% 146
98% 168
99% 179
100% 260 (longest request)
- Python 2.7.3
- Flask 0.10.1
$ ab -n 10000 -c 40 http://127.0.0.1:5000/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (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: Werkzeug/0.9.3
Server Hostname: 127.0.0.1
Server Port: 5000
Document Path: /
Document Length: 11 bytes
Concurrency Level: 40
Time taken for tests: 6.078 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 1640000 bytes
HTML transferred: 110000 bytes
Requests per second: 1645.37 [#/sec] (mean)
Time per request: 24.311 [ms] (mean)
Time per request: 0.608 [ms] (mean, across all concurrent requests)
Transfer rate: 263.52 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 2 24 0.9 24 32
Waiting: 1 24 0.9 24 32
Total: 3 24 0.9 24 32
Percentage of the requests served within a certain time (ms)
50% 24
66% 24
75% 24
80% 24
90% 24
95% 25
98% 25
99% 25
100% 32 (longest request)
Nice work! Just as a note, Elixir is using all cores out of the box. Maybe others are using all cores too (JRuby?), but some (like Go) require an explicit option. So you may want to pass the command you used to start each just for clarification. And others probably can't work efficiently on all cores anyway.