视图加载时间超过5秒时出现504错误

时间:2018-05-16 06:53:18

标签: django postgresql nginx gunicorn supervisor

我安装了 django-nginx-gunicorn-supervisor-postgresql 。在Django管理员中,如果加载视图的时间超过5秒,我就得到504.

例如,如果我使用许多记录过滤更改列表视图并花费的时间超过该时间,则会显示504。只要花费更少的时间,相同的视图就可以使用更少的记录。

我也注意到一些视图仍然在后台运行,即使在504之后,因为我可以看到它们在完成后在数据库中进行的修改。

我试图增加我发现的所有超时(nginx,gunicorn),但没有一个被配置为5秒。 有什么可能是错误配置的猜测?或者哪里可以提高504的超时?

由于

我配置的超时时间是:

在/ etc / nginx / sites-enabled / mysite

proxy_connect_timeout 60;
proxy_read_timeout 90;
proxy_send_timeout 90;
send_timeout 90;
fastcgi_read_timeout 300;

在/etc/nginx/nginx.conf

send_timeout 300;
keepalive_timeout 65;
proxy_connect_timeout 300;
proxy_read_timeout 300;
proxy_send_timeout 300;

在gunicorn_start文件中(由主管发起)

exec gunicorn -c ${CONF_FILE} ${DJANGO_WSGI_MODULE}:application \
        --name ${NAME} \
        --user=${USER} --group=${GROUP} \
        --log-level=debug \
        --timeout=90

在gunicorn.conf文件中(之前的$ {CONF_FILE})

timeout = 90
graceful_timeout = 30
keepalive = 3

1 个答案:

答案 0 :(得分:1)

我发现调试事物的最佳方法是从Django开始,一直向上,直到找出什么是超时。

首先,检查Django是否超时。

在一个终端运行中:

python manage.py runserver 127.0.0.1:8000

然后在同一台机器上的终端中执行:

wget http://127.0.0.1:8000/<path_to_your_admin_view>

如果有效,请检查Gunicorn是否超时:

在Gunicorn配置文件中,更改设置,使其绑定到本地端口而不是套接字:

exec gunicorn -c ${CONF_FILE} ${DJANGO_WSGI_MODULE}:application \
        --name ${NAME} \
        --user=${USER} --group=${GROUP} \
        --log-level=debug \
        --bind=127.0.0.1:8001
        --timeout=90

确保重新启动主管。然后在同一台机器上的终端中执行:

 wget http://127.0.0.1:8001/<path_to_your_admin_view>

如果可行,则撤消对gunicorn配置的更改,重新启动主管并直接连接到nginx以查看它是否超时:

 wget http://127.0.0.1:80/<path_to_your_admin_view>

如果这样可行,您的问题可能在代理或负载均衡器的上游。