[PATCH] Fix drain logic for small number of connections

Joel Cunningham joel.cunningham at me.com
Tue Dec 27 22:37:36 UTC 2016


Ping…any interest in accepting this patch?

> On Dec 7, 2016, at 3:50 PM, Joel Cunningham <joel.cunningham at me.com> wrote:
> 
> Hi,
> 
> I run NGINX in an embedded environment with limited resources.  We have NGINX configured with a small number of maximum connections (worker_connections is 16).  I’ve found the ngx_drain_connection() logic uses a hard-coded value to limit the number of reaped reusable connections.  This works fine with the default 512, but is too aggressive for small number of connections and ends up reaping all reusable connections.  These include new connections just accepted on the previous event loop cycle (which had not yet had a chance to receive a request) at the head of the list.
> 
> The below patch switches to the minimum of 32 or 1/4 of the number of connections.  This should be less aggressive, even when the number of connections is slightly larger than 32, e.g. 48 or 64.
> 
> Joel
> 
> # HG changeset patch
> # User Joel Cunningham <joel.cunningham at me.com>
> # Date 1481145862 21600
> #      Wed Dec 07 15:24:22 2016 -0600
> # Node ID b103dddcee7322522651f9aca764d499d5822ac1
> # Parent  75dbab4ea930bc73cca98d183c2f556eb5125462
> Fix drain logic for small number of connections
> 
> This commit fixes the ngx_drain_connections logic when maximum number of
> connections are small (16/32/64).  Using a hardcoded value of 32 when
> the number of connections is small is overlly aggressive and will result
> in repeaing the entire (or large portion of) the reusable_connections_queue,
> which includes at the tail newly accepted connections that have not received
> a request yet
> 
> The logic is updated to use the minimum of 1/4 the number of connections
> or 32, which ever is smaller
> 
> diff -r 75dbab4ea930 -r b103dddcee73 src/core/ngx_connection.c
> --- a/src/core/ngx_connection.c	Mon Nov 21 16:03:42 2016 +0300
> +++ b/src/core/ngx_connection.c	Wed Dec 07 15:24:22 2016 -0600
> @@ -1232,7 +1232,7 @@
>     ngx_queue_t       *q;
>     ngx_connection_t  *c;
> 
> -    for (i = 0; i < 32; i++) {
> +    for (i = 0; i < ngx_min(32, ngx_cycle->connection_n / 4); i++) {
>         if (ngx_queue_empty(&ngx_cycle->reusable_connections_queue)) {
>             break;
>         }
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel



More information about the nginx-devel mailing list