我对乘客+ 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;
答案 0 :(得分:0)
关键是启用全局队列。全局队列的config选项对于Apache为PassengerUseGlobalQueue on
,对于Nginx为passenger_use_global_queue on
。
我遇到了同样的问题,一些忙碌的工人拒绝了其他工人可以提供的请求。没有全局队列的实际情况是,请求已经分配给工作者,并且它们不会被重新分配给自由工作者/插槽。在启用全局队列时会有轻微的性能开销,但我发现它大大有助于整体吞吐量。
要检查的另一件事是您没有将PassengerMaxInstancesPerApp
(Apache)或passenger_max_instances_per_app
(Nginx)设置为太低的值。默认值为0(无限制)。