服务没挂你接口为啥502

87 阅读1分钟

这两天收到测试提交的问题:

问题: 接口在执行某一个特定操作之后出现大量502

收到BUG瞬间气血上涌, MLGD的不能会背C吧,

抓紧时间模拟操作,并登录服务器查看日志 日志一切正常没有重启的情况

通过浏览器控制台发现,当这个错误出现之后,其他接口也不能访问 并且其中有一个接口会被频繁调用,前3次返回500, 3次之后其他接口全体502

马上查看Nginx日志,发现了大量错误信息

no live upstreams while connecting to upstream

原因

如果A接口请求返回500,Nginx标记A所在上游不可用,然后轮询,
当所有的上游都不可用,又有其他的请求进来,Nginx直接返回502,内部报错无可用upstream

如何解决:

  1. 针对这个错误信息马上对nginx的负载均衡做出调整:

    加大max_fils到5, 超时时间调整到15s

max_fails=5 fail_timeout=15s

如下:

upstream gkd {

    ip_hash;

    server 127.0.0.1:9527 max_fails=5 fail_timeout=15s;

    server 127.0.0.1:9527 max_fails=5 fail_timeout=15s;

}
  1. 同时调整代码业务逻辑中的经常出现问题的错误返回,把http状态码从500调整到200

再次发布,问题解决

不能背C吧,肯定不能吧