Nginx upstream 中 keepalive 参数配置不当可能产生大量 TIME_WAITE,从而导致服务异常。(在采用轮询负载均衡策略,同时有大量请求的情况下)
keepalive 参数配置应该如何配置,我的建议是不小于后端 server 的数量。
upstream http_backend {
server 127.0.0.1:8080;
keepalive 16;
}
server {
...
location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
...
}
}
why ?
因为没有明确的官方文档,准确的原因需要研究源码。下面给出我的推测:
因为采用 round-robin 策略,请求绝对的平均分配,keepalive 小于 server 数会导致 Nginx 与后端 server 的长连接更容易被销毁。
同时我们还发现采用 round-robin 策略,在后端 server 处理速度不一的情况下会影响整体的吞吐量。
网友评论