Ping…any interest in accepting this patch?

> On Dec 7, 2016, at 3:50 PM, Joel Cunningham <[email protected]> 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 <[email protected]>
> # 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
> [email protected]
> http://mailman.nginx.org/mailman/listinfo/nginx-devel

_______________________________________________
nginx-devel mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx-devel

Reply via email to