nginx 报错:no live upstreams while connecting to upstream 看提示就是后端没有存活的 server,用的是 upstream 的默认配置没有手动指定 mai_fails 和 fail_timeout
后端服务器为 2 台 nginx+php 的应用,所有服务器都调整过最大进程数和最大文件打开数,且后端 2 台机器没有 http500 错误,也没有其他 nginx 错误,也没有性能问题。php 进程数设定的是 300,也只用了 50-100。那为什么还会检测 upstream 为失败状态,用的是阿里云,所以也不存在网路丢包。这是啥原因呀? (现临时已经调大 mai_fails 和 fail_timeout,后续观察下)
1
lazyfighter 2019-02-20 12:17:36 +08:00
健康检查失败了吧
|
2
xNathan 2019-02-20 19:52:50 +08:00
可能的原因:
后端服务器的 TCP 队列满了,造成 nginx 连接后端时连接被丢弃,队列满可能是后端 PHP 程序处理速度慢,或者正在做压测。 可以观察后端服务器和 nginx 的 TIME_WAIT 状态连接数,以及建立的连接数。 nginx 报错时用 `netstat -s | grep listen` 观察 ```bash 123456 times the listen queue of a socket overflowed 233333 SYNs to LISTEN sockets dropped ``` 以上两个数值有没有增加,如果有增加说明有报文被丢弃。 解决方法: 参考 https://www.nginx.com/blog/tuning-nginx/ ,将 nginx 反代后端时使用长连接,修改内核的 TCP 参数。 |
3
orangeChu 2021-03-19 10:04:53 +08:00
最近一个项目,重启时,瞬间并发过大,也会导致这个问题。
|