Sébastien,

Keepalive in an upstream defines a pool of connections attached to that upstream. The main purpose of the pool is to reduce the amount of new TCP connections: the fewer new connections you open the less load you have.

Any specific recommendation will fail in some case. So the real value is dictated by your load and your upstream applications. Consider the following when choosing a value:

If the pool is smaller than the number of servers in an upstream group - nginx may end up closing connections to an upstream every time. So the common sense is to have keepalive pool at least as big as there are servers in a group (10 servers dictate having a pool of at least 10 connections, 1 per server).

If you have a low count of lightweight upstream processes (say, it's another nginx) and a high count of concurrent requests - the value for keepalive can easily be in thousands. On the other hand, if you have 10 concurrent connections and 5 servers in an upstream something like "15" would be a good choice.

Be careful setting high values though: in opensource version keepalive is set per worker. So if you have 'keepalive 10' and 16 workers you will end up with 160 connections from nginx to an upstream.

I hope this answers your question.

Kind regards,
Igor

On 18/03/2024 13:41, Sébastien Rebecchi wrote:
Hello,

What is the good rule of thumbs for setting the number of keepalive connections to an upstream group?

1. https://www.nginx.com/blog/performance-tuning-tips-tricks/
in this blog, the writer seems to recommend a constant value of 128, no real explanation why it would fit whatever the number of servers in the upstream

2. https://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive
the upstream module doc seems to recommend a rule like 16 times the number of servers in the upstream, as we have two examples with respectively keepalive 32 for 2 upstream servers and keepalive 16 for 1 upstream server

3. https://www.nginx.com/blog/avoiding-top-10-nginx-configuration-mistakes/#no-keepalives in this blog, the writer recommends a rule of 2 times the number of servers in the upstream

I used to follow rule of item 3 as it comes with a somewhat good explanation, but it does not seem to be largely accepted.

What could explain such a divergence between several sources? What would you recommend please?

Regards,

Sébastien.

_______________________________________________
nginx mailing list
nginx@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx

_______________________________________________
nginx mailing list
nginx@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx

Reply via email to