我试图了解以下情况:
>我有一个前面有Nginx的网站(使用SSL服务,配置见下文)
>对Django应用程序的请求由gunicorn处理(0.18,配置见下文,由supervisord管理)
>当用户加载网站时,10个请求由gunicorn处理(其他是由Nginx提供的静态文件) – 此请求不是长时间运行的请求
>枪炮配置为每个工人需要maximum of 1000 requests,直到工人重生为止
>约450人可以在短时间内(1-2分钟)加载页面
>之后,gunicorn以某种方式阻止并且不再处理任何连接,结果是Nginx在一段时间后响应Gateway Timeout
我想重新启动工作人员并没有真正发生,或者机制被负载阻止了?我想了解解决此问题的方法.
任何人都可以解释这里发生了什么?非常感谢!
PS:我使用gunicorn 18.0,现在不可能使用更新的版本.
这是我使用的配置.
Nginx的:
# Nginx
upstream gunicorn_app {
server 127.0.0.1:8100;
}
server {
listen 443 ssl;
...
# skipping static files config
...
location @proxy_gunicorn_app {
proxy_read_timeout 1800;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_pass http://gunicorn_app;
}
}
gunicorn(通过supervisord开始):
# gunicorn
python manage run_gunicorn --workers 4 --max-requests 1000 -b 127.0.0.1:8100 --timeout 1800
解决方法:
不确定这里可能存在什么问题.
但是,您可以尝试使用Server钩子进行调试,例如:
> on_reload:通过SIGHUP重新加载时调用以回收工作程序.可调用者需要接受Arbiter的单个实例变量.
def on_reload(服务器):
#Print一些调试消息
> worker_int:在SIGINT或SIGQUIT退出工作符之后调用.
def worker_int(worker):
#Print一些调试消息
> pre_request:在工作程序处理请求之前调用.
def pre_request(worker,req):
#Print一些调试消息
#worker.log.debug(“%s%s”%(req.method,req.path))
> post_request:在工作者处理请求后调用.
def post_request(worker,req,environ,resp):
#Print一些调试消息
这可能有助于您找到问题的根源.
在gunicorn文档中引用:
http://docs.gunicorn.org/en/stable/settings.html#server-hooks
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。