Por que o puma não está usando todos os seus threads?

3

Estou usando o puma e o nxinx e, até onde posso dizer, ele só usa um único thread, mesmo quando eu inicio com o padrão de 16 threads ou mais. Eu configurei um novo aplicativo de trilhos, depois passei pela configuração descrita aqui:

link

O que dá este exemplo de configuração nginx:

upstream benchmarkapp.com {server unix:/tmp/benchmark_app.sock fail_timeout=0;}
server {
 server_name benchmarkapp.com;
 root /home/tristan/benchmark_app/public;
 try_files $uri/index.html $uri @benchmarkapp.com;
 location @benchmarkapp.com {
 proxy_redirect off;
 proxy_pass http://benchmarkapp.com;
 }
}

Em seguida, criou uma simples ação do controlador que simplesmente dorme por 3 segundos e renderiza "hello":

class WelcomeController < ApplicationController
  def index
    sleep(2)
    render :text => "hello"   
  end
end

Então comecei o puma com: puma -t 16 -b unix:///tmp/benchmark_app.sock -S /tmp/benchmark_app.state

uma vez correndo, eu bato com 10 usuários simultâneos usando cerco, e aqui está o resultado

 % siege -c 10 -t 60s http://benchmarkapp.com
** SIEGE 2.70
** Preparing 10 concurrent users for battle.
The server is now under siege...
HTTP/1.1 200   2.04 secs:      25 bytes ==> /
HTTP/1.1 200   4.05 secs:      25 bytes ==> /
HTTP/1.1 200   6.06 secs:      25 bytes ==> /
HTTP/1.1 200   8.08 secs:      25 bytes ==> /
HTTP/1.1 200  10.09 secs:      25 bytes ==> /

Qual é precisamente o que eu esperaria ver se o aplicativo estivesse sendo executado com thread único. Pegue as duas primeiras solicitações. Eles chegam mais ou menos na mesma hora. O primeiro leva dois segundos, até aí tudo bem. Mas o segundo, terceiro, ... até o dia 10, todos têm que esperar mais 2 segundos para cada pedido antes dele. De fato, se eu reiniciar o puma com apenas 1 thread, obtenho exatamente esse resultado.

O que estou fazendo de errado aqui? Como posso fazer com que o servidor realmente use todos os threads que o puma gera? Se tudo funcionar corretamente, espero ver:

 % siege -c 10 -t 60s http://benchmarkapp.com
** SIEGE 2.70
** Preparing 10 concurrent users for battle.
The server is now under siege...
HTTP/1.1 200   2.04 secs:      25 bytes ==> /
HTTP/1.1 200   2.05 secs:      25 bytes ==> /
HTTP/1.1 200   2.03 secs:      25 bytes ==> /
HTTP/1.1 200   2.01 secs:      25 bytes ==> /
HTTP/1.1 200   2.06 secs:      25 bytes ==> /

Como posso fazer isso acontecer?

    
por DrFredEdison 23.05.2014 / 02:22

0 respostas