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

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

  •  
  •   304464743 · 60 天前 · 742 次点击
    这是一个创建于 60 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    2 回复  |  直到 2019-02-20 19:52:50 +08:00
        1
    lazyfighter   59 天前
    健康检查失败了吧
        2
    xNathan   59 天前
    可能的原因:
    后端服务器的 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 参数。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2211 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 15ms · UTC 03:16 · PVG 11:16 · LAX 20:16 · JFK 23:16
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1