我试图了解以下情况:
我有一个前面的Nginx网站(服务与SSL,configuration见下文)
对Django应用程序的请求由gunicorn处理(0.18,configuration见下文,由supervisordpipe理)
当用户加载网站时,10个请求由gunicorn处理(其他的是由Nginx提供的静态文件) – 这个请求不是长时间运行的请求
gunicorn被configuration为每个工作者最多需要1000个请求 ,直到工人重新生成
大约450人可以在很短的时间范围内(1-2分钟)
之后gunicorn莫名其妙地阻止和不处理任何更多的连接,结果是Nginx响应Gateway Timeout一段时间后
我想工人的重启并不是真的发生,或者机制被负载阻塞了吗? 我想了解正在发生什么事情来解决这个问题。
任何人都可以解释这里发生了什么? 非常感谢!
PS:我被绑在使用gunicorn 18.0,目前不可能更新的版本。
PHP-fpm如何使用dynamicstream程pipe理器pipe理员工?
我怎样才能让Nginx返回一个静态的响应,并发送请求头到应用程序?
linux迁移过程中cpu的使用率是如此之高,为什么?
简短的唯一ID
这里是我使用的configuration。
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
不确定这里可能是什么问题。
但是,你可以尝试使用服务器钩子调试,如:
on_reload :在通过SIGHUP重新加载期间调用以回收工作人员。 可调用需要接受Arbiter的单个实例变量。
def on_reload(server): #Print some debug message
worker_int :刚刚在SIGINT或SIGQUIT上退出的员工调用。
def worker_int(worker): #Print some debug message
pre_request :在工作人员处理请求之前调用。
def pre_request(worker,req): #Print some debug message #worker.log.debug("%s %s" % (req.method,req.path))
post_request :在工作人员处理请求之后调用。
def post_request(worker,req,environ,resp): #Print some debug message
这可能会帮助你解决问题的根源。
在gunicorn文档中引用: http ://docs.gunicorn.org/en/stable/settings.html#server-hooks
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。