这两天收到测试提交的问题:
问题: 接口在执行某一个特定操作之后出现大量502
收到BUG瞬间气血上涌, MLGD的不能会背C吧,
抓紧时间模拟操作,并登录服务器查看日志 日志一切正常没有重启的情况通过浏览器控制台发现,当这个错误出现之后,其他接口也不能访问 并且其中有一个接口会被频繁调用,前3次返回500, 3次之后其他接口全体502
马上查看Nginx日志,发现了大量错误信息
no live upstreams while connecting to upstream
原因
如果A接口请求返回500,Nginx标记A所在上游不可用,然后轮询,
当所有的上游都不可用,又有其他的请求进来,Nginx直接返回502,内部报错无可用upstream
如何解决:
- 针对这个错误信息马上对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;
}
- 同时调整代码业务逻辑中的经常出现问题的错误返回,把http状态码从500调整到200
再次发布,问题解决
不能背C吧,肯定不能吧