<div dir="ltr"><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">There is no downside on the server application I suppose, especially since, as you recalled, nginx got no trouble for it.<br><br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">One big problem is, there might be socket exhaustion on the TCP stack of your front-end machine(s). Remember a socket is defined by a triple <protocol, address, port> and the number of available ports is 65535 (layer 4) for every IP (layer 3) double <protocol, address>.<br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">The baseline is, for TCP connections underlying your HTTP communication, you have 65535 port for each IP version your server handles.<br><br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">Now, you have to consider the relation between new clients (thus new connections) and the existing/open ones.<br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">If you have very low traffic, you could set an almost infinite timeout on your keepalive capability, that would greatly help people who never sever connection to your website because they are so addicted to it (and never close the tab of their browser to it).<br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">On the contrary, if you are very intensively seing new clients, with the same parameters, you would quickly exhaust your available sockets and be unable to accept client connections.<br><br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">On the opposite scenario where you are setting a timeout on keepalive which is too low, you would hurt you server performance by using CPU to manage overhead connections for a single client, thus wasting resources and inducing latency, which are issues keepalive helps to address.<br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)"><br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">Given the 65535 ports limitation is not going to change, at least in a recent future (hardcoded on 16 bits in nowadays protocols), you have essentially 2 parameters to consider:<br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">- How often you get new clients<br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">- What is the mean time users spend connected to your server(s)<br><br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">Those should help you define the most efficient keepalive timeout. <a href="http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout">nginx sets the default time for it at 75 seconds</a>.<br><br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">On a side note, there are also browser trouble with it, see <a href="http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_disable">keepalive_disable</a>.<br><br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">And finally, nginx provides the ability to recycle connections based on a number of requests made (default 100).<br>I guess that is a way of mitigating clients with different behaviors: a client having made 100 requests is probably considered to hav had its share of time on the server, and it is time to put it back in the pool to give others access in case of congestion.<br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">On the other hand, a client taking its time to browse your website (and thus not reaching the requests limit) should be given the whole timeout time allocated on the server.<br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">I see no other reason than justice/balancing here, no technical one which is other than th already addressed one: giving each client enough time to browse the website with minimal disconnection, while avoid resources unfairly taken away from other people.<br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)"><br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">I might be misled, in which case I ocunt on people to correct me.<br></div><div class="gmail_default" style="font-size:small;color:rgb(51,51,153)">I suggest you also read:<br>- <a href="https://www.nginx.com/blog/tuning-nginx/">https://www.nginx.com/blog/tuning-nginx/</a> ('Keepalive Connections' part)<br>- and more importantly <a href="https://www.nginx.com/blog/http-keepalives-and-web-performance/">https://www.nginx.com/blog/http-keepalives-and-web-performance/</a><br></div><div class="gmail_extra"><div><div class="gmail_signature" data-smartmail="gmail_signature"><font size="1"><span style="color:rgb(102,102,102)">---<br></span><b><span style="color:rgb(102,102,102)">B. R.</span></b><span style="color:rgb(102,102,102)"></span></font></div></div>
<br><div class="gmail_quote">On Sat, Jun 18, 2016 at 1:26 PM, Aahan Krish <span dir="ltr"><<a href="mailto:krish@aahan.me" target="_blank">krish@aahan.me</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I read something interesting today:<br>
<<a href="https://blog.martinfjordvald.com/2011/04/optimizing-nginx-for-high-traffic-loads/" rel="noreferrer" target="_blank">https://blog.martinfjordvald.com/2011/04/optimizing-nginx-for-high-traffic-loads/</a>><br>
<br>
"Keep alive is a HTTP feature which allows user agents to keep the<br>
connection to your server open for a number of requests or until the<br>
specified time out is reached. This won’t actually change the<br>
performance of our nginx server very much as it handles idle<br>
connections very well. The author of nginx claims that 10,000 idle<br>
connections will use only 2.5 MB of memory, and from what I’ve seen<br>
this seems to be correct.""<br>
<br>
So why is it that people on the web (and in IRC) still recommend<br>
setting `keepalive_timeout` to a short period (< 30 seconds) when<br>
Nginx can handle idle keep-alive connections like a champ (using very<br>
little resources) while serving active ones? Is that bad advise?<br>
<br>
I get this advise so often that I believe there must be something that<br>
I am missing. What's it?<br>
<br>
_______________________________________________<br>
nginx mailing list<br>
<a href="mailto:nginx@nginx.org">nginx@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx</a></blockquote></div><br></div></div>