尽管passenger_max_pool_size = 30,乘客不会产生超过6个实例

时间:2010-05-18 23:09:54

标签: nginx passenger

我对乘客+ nginx有一些问题,希望有人能够帮助我并指导我朝着正确的方向前进。

我已将passenger_max_pool_size设置为30,但乘客从未产生超过6个实例。

我正在加载一个网页,该网页使用ajax从服务器加载30个子页面,但因为乘客只生成6个实例,所以它们排队。 令我困惑的是Waiting on global queue为0,但我可以在浏览器中看到所有内容都排队等候。当前6个ajax请求完成后,接下来的6个开始加载。

我错过了什么? :)

这是乘客状态的输出(当我检查此状态时,我在浏览器中有大约24个请求等待来自服务器的响应)

----------- General information -----------
max      = 30
count    = 6
active   = 6
inactive = 0
Waiting on global queue: 0

----------- Domains -----------
/srv/rails/production/current: 
  PID: 28428   Sessions: 1    Processed: 42      Uptime: 5m 43s
  PID: 28424   Sessions: 1    Processed: 23      Uptime: 5m 43s
  PID: 28422   Sessions: 1    Processed: 7       Uptime: 5m 43s
  PID: 28420   Sessions: 1    Processed: 22      Uptime: 6m 0s
  PID: 28426   Sessions: 1    Processed: 39      Uptime: 5m 43s
  PID: 28430   Sessions: 1    Processed: 7       Uptime: 5m 43s

这些是我在nginx.conf中的乘客相关设置

http {
     passenger_root /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.11;
     passenger_ruby /opt/ruby/bin/ruby;
     passenger_max_pool_size 30;

1 个答案:

答案 0 :(得分:0)

关键是启用全局队列。全局队列的config选项对于Apache为PassengerUseGlobalQueue on,对于Nginx为passenger_use_global_queue on

我遇到了同样的问题,一些忙碌的工人拒绝了其他工人可以提供的请求。没有全局队列的实际情况是,请求已经分配给工作者,并且它们不会被重新分配给自由工作者/插槽。在启用全局队列时会有轻微的性能开销,但我发现它大大有助于整体吞吐量。

要检查的另一件事是您没有将PassengerMaxInstancesPerApp(Apache)或passenger_max_instances_per_app(Nginx)设置为太低的值。默认值为0(无限制)。