nginx + docker + gunicorn + flask上的间歇性502错误

时间:2019-07-05 18:00:51

标签: python docker nginx flask gunicorn

我有一个在Docker内部运行的Flask应用。在容器内,我启动了一个由2名eventlet工作人员组成的Gunicorn服务器。作为反向代理,我正在使用nginx连接到容器内的gunicorn服务器。

在负载测试中,我注意到服务器抛出了502个错误。当我看着/var/log/nginx/error.log时,看到了以下结果:

2019/07/05 15:16:23 [error] 4233#0: *2569 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 6.6.6.6, server: , request: "POST /api/action HTTP/1.1", upstream: "http://6.6.0.6:5000/api/action", host: "api.abcweb.com"

其他观察结果:

  • 当我每秒发送8-10个请求时,发出800-900个请求时会引发第一个502错误。
  • 当我每秒发送20个以上的请求时,发出大约100-200个请求后,我看到第一个502错误。

但是,当我从混合物中取出黑胶粒时。即从容器中使用python3 app.py启动服务器,而不是通过Gunicorn运行服务器。即使每秒超过40个请求,我也不再遇到502错误。因此问题很可能与Gunicorn有关。

有人能指导我关于导致频繁502错误的原因,尤其是在使用Gunicorn的情况下吗?当我运行nginx时,我真的需要使用gunicorn吗?(我认为我的应用程序将从异步工作程序中受益)?在此问题上的任何帮助将不胜感激。谢谢!

PS:我在容器内的Gunicorn日志中看不到那些502请求。

更新:通过将工作程序类型更改为gthread可以解决问题,但是我想使用异步工作程序,并且gevent在我正在使用的某些库中不能很好地工作,这就是为什么我正在使用eventlet。如何使用eventlet工作程序解决此问题?谢谢!

0 个答案:

没有答案