我有一个在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"
其他观察结果:
但是,当我从混合物中取出黑胶粒时。即从容器中使用python3 app.py
启动服务器,而不是通过Gunicorn运行服务器。即使每秒超过40个请求,我也不再遇到502错误。因此问题很可能与Gunicorn有关。
有人能指导我关于导致频繁502错误的原因,尤其是在使用Gunicorn的情况下吗?当我运行nginx时,我真的需要使用gunicorn吗?(我认为我的应用程序将从异步工作程序中受益)?在此问题上的任何帮助将不胜感激。谢谢!
PS:我在容器内的Gunicorn日志中看不到那些502请求。
更新:通过将工作程序类型更改为gthread
可以解决问题,但是我想使用异步工作程序,并且gevent
在我正在使用的某些库中不能很好地工作,这就是为什么我正在使用eventlet
。如何使用eventlet
工作程序解决此问题?谢谢!