Was investigating some issues today when we noticed that least_conn
wasn’t
behaving as expected.
upstream backend {
least_conn;
server unix:/tmp/sock-1.sock;
server unix:/tmp/sock-2.sock;
server unix:/tmp/sock-3.sock;
}
The expected behavior for 4 simultaneous requests it should distribute
them:
sock-1: 2
sock-2: 1
sock-3: 1
However, what we’re seeing is:
sock-1: 3
sock-2: 1
sock-3: 0
Which coincidentally lines up with the number of requests a socket can
service simultaneously.
This is using 1.2.7
On Thu, Mar 21, 2013 at 01:45:14AM -0700, John W. wrote:
sock-1: 2
sock-2: 1
sock-3: 1
However, what we’re seeing is:
sock-1: 3
sock-2: 1
sock-3: 0
Which coincidentally lines up with the number of requests a socket can
service simultaneously.
This is using 1.2.7
And the number of configured worker processes is?
Ohhhh… that makes complete sense now.
Had 4 workers.
Thanks!
Well doesn’t make sense when theres >4 concurrent requests
At any given time there’s around 12 active_connections, but sock-3 is
still
never being used
On Thu, Mar 21, 2013 at 12:03:59PM -0700, John W. wrote:
Well doesn’t make sense when theres >4 concurrent requests
At any given time there’s around 12 active_connections, but sock-3 is
still never being used
Can you see a difference with only one worker process?
Currently, different workers have distinct counters of active
connections.
It should be unnoticed under a high load.
Going to pushing out the change to 1 worker later today.
It’s just become more of an exercise in understanding why it was
behaving
that way.
Even under “high” load (in this case ~50 active_connections), the 3
socks
don’t seem to be getting equal number of requests.