Improved connection draining with small number of connections.
Closing up to 32 connections might be too aggressive if worker_connections is set to a comparable number (and/or there are only a small number of reusable connections). If an occasional connection shorage happens in such a configuration, it leads to closing all reusable connections instead of gradually reducing keepalive timeout to a smaller value. To improve granularity in such configurations we now close no more than 1/8 of all reusable connections at once. Suggested by Joel Cunningham.
This commit is contained in:
parent
5425ef4841
commit
01d042be7e
|
@ -1204,6 +1204,7 @@ ngx_reusable_connection(ngx_connection_t *c, ngx_uint_t reusable)
|
|||
|
||||
if (c->reusable) {
|
||||
ngx_queue_remove(&c->queue);
|
||||
ngx_cycle->reusable_connections_n--;
|
||||
|
||||
#if (NGX_STAT_STUB)
|
||||
(void) ngx_atomic_fetch_add(ngx_stat_waiting, -1);
|
||||
|
@ -1217,6 +1218,7 @@ ngx_reusable_connection(ngx_connection_t *c, ngx_uint_t reusable)
|
|||
|
||||
ngx_queue_insert_head(
|
||||
(ngx_queue_t *) &ngx_cycle->reusable_connections_queue, &c->queue);
|
||||
ngx_cycle->reusable_connections_n++;
|
||||
|
||||
#if (NGX_STAT_STUB)
|
||||
(void) ngx_atomic_fetch_add(ngx_stat_waiting, 1);
|
||||
|
@ -1228,11 +1230,13 @@ ngx_reusable_connection(ngx_connection_t *c, ngx_uint_t reusable)
|
|||
static void
|
||||
ngx_drain_connections(ngx_cycle_t *cycle)
|
||||
{
|
||||
ngx_int_t i;
|
||||
ngx_uint_t i, n;
|
||||
ngx_queue_t *q;
|
||||
ngx_connection_t *c;
|
||||
|
||||
for (i = 0; i < 32; i++) {
|
||||
n = ngx_max(ngx_min(32, cycle->reusable_connections_n / 8), 1);
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (ngx_queue_empty(&cycle->reusable_connections_queue)) {
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -53,6 +53,7 @@ struct ngx_cycle_s {
|
|||
ngx_uint_t modules_used; /* unsigned modules_used:1; */
|
||||
|
||||
ngx_queue_t reusable_connections_queue;
|
||||
ngx_uint_t reusable_connections_n;
|
||||
|
||||
ngx_array_t listening;
|
||||
ngx_array_t paths;
|
||||
|
|
Loading…
Reference in New Issue