# Upstream least\_conn behavior irregularity

**URL:** <https://www.ruby-forum.com/t/upstream-least-conn-behavior-irregularity/227604>\
**Category:** NGINX\
**Created:** [March 21, 2013, 9:46am UTC](https://www.ruby-forum.com/t/upstream-least-conn-behavior-irregularity/227604 "2013-03-21T09:46:08Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![princenamor](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c0e974/32.png) [@princenamor](https://www.ruby-forum.com/u/princenamor)\
**Post date:** [March 21, 2013, 9:46am UTC](https://www.ruby-forum.com/t/upstream-least-conn-behavior-irregularity/227604/1 "2013-03-21T09:46:08Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![princenamor](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c0e974/32.png) [@princenamor](https://www.ruby-forum.com/u/princenamor)\
**Post date:** [March 21, 2013, 12:47pm UTC](https://www.ruby-forum.com/t/upstream-least-conn-behavior-irregularity/227604/2 "2013-03-21T12:47:52Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![princenamor](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c0e974/32.png) [@princenamor](https://www.ruby-forum.com/u/princenamor)\
**Post date:** [March 21, 2013, 5:34pm UTC](https://www.ruby-forum.com/t/upstream-least-conn-behavior-irregularity/227604/3 "2013-03-21T17:34:52Z")

</div>

Ohhhh… that makes complete sense now.

Had 4 workers.

Thanks!

---

<div class="post-metadata">

**Author:** ![princenamor](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c0e974/32.png) [@princenamor](https://www.ruby-forum.com/u/princenamor)\
**Post date:** [March 21, 2013, 8:04pm UTC](https://www.ruby-forum.com/t/upstream-least-conn-behavior-irregularity/227604/4 "2013-03-21T20:04:27Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![princenamor](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c0e974/32.png) [@princenamor](https://www.ruby-forum.com/u/princenamor)\
**Post date:** [March 21, 2013, 8:30pm UTC](https://www.ruby-forum.com/t/upstream-least-conn-behavior-irregularity/227604/5 "2013-03-21T20:30:10Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![princenamor](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/c0e974/32.png) [@princenamor](https://www.ruby-forum.com/u/princenamor)\
**Post date:** [March 21, 2013, 9:02pm UTC](https://www.ruby-forum.com/t/upstream-least-conn-behavior-irregularity/227604/6 "2013-03-21T21:02:19Z")

</div>

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.
