RVM + Puma + Ubuntu
description "Puma webservice for bmsweb"
author "Piotr Zolnierek <pz@anixe.pl>"
respawn
respawn limit 15 5
env PADRINO_ENV=acceptance
env APP_PATH=/opt/bmsweb/current
env LOG=/var/log/nginx/puma_bmsweb.log
env BASE_URI=/bmsweb
console output
chdir /opt/bmsweb/current
script
exec su root -c bash -l -c "cd $APP_PATH && PADRINO_ENV=$PADRINO_ENV SCRIPT_NAME=$BASE_URI RACK_BASE_URI=$BASE_URI bundle exec puma -b 'unix:///tmp/puma.sock' -S $APP_PATH/tmp/puma >> $LOG"
end script
# default 8-16 threads
# notice the number of failed requests
> ab -c 20 -n 1000 '***secret***'
Server Software: nginx/1.0.15
Server Hostname: hotx.resfinity.com
Server Port: 9099
Document Path: ***secret***
Document Length: 173 bytes
Concurrency Level: 20
Time taken for tests: 64.359 seconds
Complete requests: 1000
Failed requests: 980
(Connect: 0, Receive: 0, Length: 980, Exceptions: 0)
Write errors: 0
Non-2xx responses: 20
Total transferred: 15148480 bytes
HTML transferred: 14366340 bytes
Requests per second: 15.54 [#/sec] (mean)
Time per request: 1287.179 [ms] (mean)
Time per request: 64.359 [ms] (mean, across all concurrent requests)
Transfer rate: 229.86 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 3 3.0 2 24
Processing: 3 1273 3490.3 1053 64263
Waiting: 3 1270 3490.4 1048 64261
Total: 6 1276 3490.3 1055 64267
Percentage of the requests served within a certain time (ms)
50% 1055
66% 1240
75% 1390
80% 1470
90% 1707
95% 2039
98% 2531
99% 2801
100% 64267 (longest request)
> ab -c 20 -n 1000 '***secret***'
Server Software: nginx/1.0.15
Server Hostname: hotx.resfinity.com
Server Port: 8088
Document Path: ***secret***
Document Length: 14656 bytes
Concurrency Level: 20
Time taken for tests: 20.504 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 15536000 bytes
HTML transferred: 14656000 bytes
Requests per second: 48.77 [#/sec] (mean)
Time per request: 410.086 [ms] (mean)
Time per request: 20.504 [ms] (mean, across all concurrent requests)
Transfer rate: 739.94 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 4 2.3 3 20
Processing: 113 402 148.1 390 1179
Waiting: 110 398 148.1 386 1177
Total: 117 406 148.0 394 1182
Percentage of the requests served within a certain time (ms)
50% 394
66% 428
75% 480
80% 519
90% 581
95% 701
98% 798
99% 897
100% 1182 (longest request)
# created by pzol for testing independent worker pools, do not delete, please
upstream puma {
server unix://tmp/puma.sock fail_timeout=0;
}
server {
listen 9099;
server_name localhost;
root /var/www/root;
error_log /var/log/nginx/puma_error.log;
access_log /var/log/nginx/puma_access.log;
location /bmsweb {
rewrite ^/bmsweb/(/?)(.*) /$2 break;
proxy_pass http://puma;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static/ {
alias /usr/local/nginx/static/;
}
rack_env acceptance;
}
I use the latest Puma v1.4.0 from rubygems.
Make sure you have nginx installed with these options:
>/opt/nginx/sbin/nginx -V
nginx version: nginx/1.0.15
built by gcc 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)
TLS SNI support enabled
configure arguments: --prefix=/opt/nginx --with-http_ssl_module --with-http_gzip_static_module --with-cc-opt=-Wno-error --add-module=/usr/local/rvm/gems/ruby-1.9.3-p0/gems/passenger-3.0.12/ext/nginx --with-http_ssl_module --with-pcre=/tmp/pcre/pcre-8.30
We installed nginx using passenger as you can see above, as we run currently most apps with it, but that is of course not required for puma to run.