关于 no live upstreams while connecting to upstream 的问题

2019-02-20 10:56:09 +08:00
 304464743

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

12026 次点击
所在节点    NGINX
3 条回复
lazyfighter
2019-02-20 12:17:36 +08:00
健康检查失败了吧
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 参数。
orangeChu
2021-03-19 10:04:53 +08:00
最近一个项目,重启时,瞬间并发过大,也会导致这个问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/536802

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX