我试图了解以下情况:
- 我有一个前面有 nginx 的网站(使用 SSL,配置见下文)
- 对 Django 应用程序的请求由 gunicorn 处理(0.18,配置见下文,由 supervisord 管理)
- 当用户加载网站时,gunicorn 会处理 10 个请求(其他请求是由 nginx 提供的静态文件)——这些请求不是长时间运行的请求
- gunicorn 被配置为每个工作人员最多接受 1000 个请求,直到工作人员重生
- 大约 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