服务器问答

关于 no live upstreams while connecting to upstream 的问题
0
2021-05-19 17:01:09
idczone

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,后续观察下)


健康检查失败了吧

可能的原因:
后端服务器的 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 参数。

最近一个项目,重启时,瞬间并发过大,也会导致这个问题。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服