Skip to content

Instantly share code, notes, and snippets.

@bbrowning
Created November 8, 2013 21:49
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bbrowning/7378241 to your computer and use it in GitHub Desktop.
Save bbrowning/7378241 to your computer and use it in GitHub Desktop.
Poor Puma performance with keepalives enabled on JRuby. For both 'ab' runs, Puma was warmed up before running the actual test shown.
run lambda { |env|
[200, { 'Content-Type' => 'text/plain' }, ["hello world\n"]]
}
$ ab -c 10 -n 25000 -k http://localhost:9292/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 2500 requests
Completed 5000 requests
Completed 7500 requests
Completed 10000 requests
Completed 12500 requests
Completed 15000 requests
Completed 17500 requests
Completed 20000 requests
Completed 22500 requests
Completed 25000 requests
Finished 25000 requests
Server Software:
Server Hostname: localhost
Server Port: 9292
Document Path: /
Document Length: 12 bytes
Concurrency Level: 10
Time taken for tests: 100.146 seconds
Complete requests: 25000
Failed requests: 0
Write errors: 0
Keep-Alive requests: 25000
Total transferred: 2525000 bytes
HTML transferred: 300000 bytes
Requests per second: 249.64 [#/sec] (mean)
Time per request: 40.058 [ms] (mean)
Time per request: 4.006 [ms] (mean, across all concurrent requests)
Transfer rate: 24.62 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 1
Processing: 1 40 1.5 40 105
Waiting: 0 0 1.4 0 66
Total: 1 40 1.5 40 105
Percentage of the requests served within a certain time (ms)
50% 40
66% 40
75% 40
80% 40
90% 40
95% 40
98% 40
99% 41
100% 105 (longest request)
$ ab -c 10 -n 25000 http://localhost:9292/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 2500 requests
Completed 5000 requests
Completed 7500 requests
Completed 10000 requests
Completed 12500 requests
Completed 15000 requests
Completed 17500 requests
Completed 20000 requests
Completed 22500 requests
Completed 25000 requests
Finished 25000 requests
Server Software:
Server Hostname: localhost
Server Port: 9292
Document Path: /
Document Length: 12 bytes
Concurrency Level: 10
Time taken for tests: 2.407 seconds
Complete requests: 25000
Failed requests: 0
Write errors: 0
Total transferred: 2400000 bytes
HTML transferred: 300000 bytes
Requests per second: 10384.75 [#/sec] (mean)
Time per request: 0.963 [ms] (mean)
Time per request: 0.096 [ms] (mean, across all concurrent requests)
Transfer rate: 973.57 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 0 1 0.9 1 16
Waiting: 0 0 0.8 0 16
Total: 0 1 0.9 1 16
Percentage of the requests served within a certain time (ms)
50% 1
66% 1
75% 1
80% 1
90% 1
95% 1
98% 2
99% 2
100% 16 (longest request)
$ jruby -v
jruby 1.7.6 (1.9.3p392) 2013-10-22 6004147 on OpenJDK 64-Bit Server VM 1.7.0_40-mockbuild_2013_10_02_16_56-b00 [linux-amd64]
$ jruby -S puma -e production -t 64 config.ru
The signal USR1 is in use by the JVM and will not work correctly on this platform
Puma starting in single mode...
* Version 2.6.0, codename: Pantsuit Party
* Min threads: 0, max threads: 64
* Environment: production
* Listening on tcp://0.0.0.0:9292
Use Ctrl-C to stop
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment