Upstream least_conn behavior irregularity

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.