微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Gunicorn在高负载下具有最大请求限制块

我试图了解以下情况:

我有一个前面的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

PHP-fpm中cpu使用率高

这里是我使用的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] 举报,一经查实,本站将立刻删除。

相关推荐