views:

22

answers:

1

I have some problems with passenger + nginx and hope someone might be able help me and direct me in the right direction.

I've set the passenger_max_pool_size to 30 but passenger never spawns more than 6 instances.

I'm loading a webpage that uses ajax to load 30 sub pages from the server but because passenger only spawns 6 instances they are queued. What makes me confused is that Waiting on global queue is 0 but I can see in my browser that everything gets queued. When the first 6 ajax requests are done the next 6 starts loading.

What am I missing? :)

This is the output from passenger-status (I had about 24 requests in the browser waiting for response from the server when I checked this status)

----------- 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

These are my passenger related settings in 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;
A: 

The key is to enable the global queue. The config option for the global queue is PassengerUseGlobalQueue on for Apache and passenger_use_global_queue on for Nginx.

I had the same issue with a few busy workers holding back requests that could be served by other workers. What is actually happening without the global queue is requests have already been allocated to a worker and they won't be reallocated to a free worker/slot. There is a slight performance overhead in enabling the global queue but I've found it has massively helped throughput overall.

Another thing to check is that you haven't set PassengerMaxInstancesPerApp (Apache) or passenger_max_instances_per_app (Nginx) to a value too low. The default value is 0 (no limit).

Jason Weathered