[nginx] Upstream keepalive: keepalive_requests directive.
Robert Paprocki
rpaprocki at fearnothingproductions.net
Fri Aug 10 20:50:04 UTC 2018
Quite the patch. I recall this behavior being discussed a number of times
in the past.
Question: why the default of 100? This feels like a significantly breaking
change wrt. the previous behavior. Are there any plans for advanced
communication regarding this change, outside of a nominal changelog entry
(e.g., "introduced 'keepalive_requests' directive")?
On Fri, Aug 10, 2018 at 1:02 PM, Maxim Dounin <mdounin at mdounin.ru> wrote:
> details: http://hg.nginx.org/nginx/rev/70c6b08973a0
> branches:
> changeset: 7340:70c6b08973a0
> user: Maxim Dounin <mdounin at mdounin.ru>
> date: Fri Aug 10 21:54:46 2018 +0300
> description:
> Upstream keepalive: keepalive_requests directive.
>
> The directive configures maximum number of requests allowed on
> a connection kept in the cache. Once a connection reaches the number
> of requests configured, it is no longer saved to the cache.
> The default is 100.
>
> Much like keepalive_requests for client connections, this is mostly
> a safeguard to make sure connections are closed periodically and the
> memory allocated from the connection pool is freed.
>
> diffstat:
>
> src/http/modules/ngx_http_upstream_keepalive_module.c | 14
> ++++++++++++++
> src/http/ngx_http_upstream.c | 2 ++
> 2 files changed, 16 insertions(+), 0 deletions(-)
>
> diffs (64 lines):
>
> diff --git a/src/http/modules/ngx_http_upstream_keepalive_module.c
> b/src/http/modules/ngx_http_upstream_keepalive_module.c
> --- a/src/http/modules/ngx_http_upstream_keepalive_module.c
> +++ b/src/http/modules/ngx_http_upstream_keepalive_module.c
> @@ -12,6 +12,7 @@
>
> typedef struct {
> ngx_uint_t max_cached;
> + ngx_uint_t requests;
> ngx_msec_t timeout;
>
> ngx_queue_t cache;
> @@ -92,6 +93,13 @@ static ngx_command_t ngx_http_upstream_
> offsetof(ngx_http_upstream_keepalive_srv_conf_t, timeout),
> NULL },
>
> + { ngx_string("keepalive_requests"),
> + NGX_HTTP_UPS_CONF|NGX_CONF_TAKE1,
> + ngx_conf_set_num_slot,
> + NGX_HTTP_SRV_CONF_OFFSET,
> + offsetof(ngx_http_upstream_keepalive_srv_conf_t, requests),
> + NULL },
> +
> ngx_null_command
> };
>
> @@ -142,6 +150,7 @@ ngx_http_upstream_init_keepalive(ngx_con
> ngx_http_upstream_keepalive_
> module);
>
> ngx_conf_init_msec_value(kcf->timeout, 60000);
> + ngx_conf_init_uint_value(kcf->requests, 100);
>
> if (kcf->original_init_upstream(cf, us) != NGX_OK) {
> return NGX_ERROR;
> @@ -312,6 +321,10 @@ ngx_http_upstream_free_keepalive_peer(ng
> goto invalid;
> }
>
> + if (c->requests >= kp->conf->requests) {
> + goto invalid;
> + }
> +
> if (!u->keepalive) {
> goto invalid;
> }
> @@ -500,6 +513,7 @@ ngx_http_upstream_keepalive_create_conf(
> */
>
> conf->timeout = NGX_CONF_UNSET_MSEC;
> + conf->requests = NGX_CONF_UNSET_UINT;
>
> return conf;
> }
> diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
> --- a/src/http/ngx_http_upstream.c
> +++ b/src/http/ngx_http_upstream.c
> @@ -1546,6 +1546,8 @@ ngx_http_upstream_connect(ngx_http_reque
>
> c = u->peer.connection;
>
> + c->requests++;
> +
> c->data = r;
>
> c->write->handler = ngx_http_upstream_handler;
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20180810/7d5f3d97/attachment.html>
More information about the nginx-devel
mailing list