V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
304464743
V2EX  ›  NGINX

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

  •  
  •   304464743 · 2019-02-20 10:56:09 +08:00 · 12031 次点击
    这是一个创建于 2139 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    3 条回复    2021-03-19 10:04:53 +08:00
    lazyfighter
        1
    lazyfighter  
       2019-02-20 12:17:36 +08:00
    健康检查失败了吧
    xNathan
        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 参数。
    orangeChu
        3
    orangeChu  
       2021-03-19 10:04:53 +08:00
    最近一个项目,重启时,瞬间并发过大,也会导致这个问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2913 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:55 · PVG 20:55 · LAX 04:55 · JFK 07:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.