首页 > 解决方案 > 对 Nginx 的任何请求的 504 网关超时,具有大量免费资源

问题描述

我们一直在内部维护一个项目,该项目同时具有 Web 和移动应用程序平台。该项目的后端使用 Django 1.9 (Python 3.4) 开发并部署在 AWS 中。

服务器堆栈由 Nginx、Gunicorn、Django 和 PostgreSQL 组成。我们使用基于 Redis 的缓存服务器来处理资源密集型的繁重查询。我们的 AWS 资源包括:

  1. t1.medium EC2(2 核,4 GB RAM)
  2. 带有一个额外只读副本的 PostgreSQL RDS。

现在 Gunicorn 设置为创建 5 个工人(通过遵循 2*n+1 规则)。负载方面,每分钟大约有 20-30 个移动用户发出请求,每小时有 5-10 个用户检查 Web 面板。所以我会说,负荷不是很大。

现在这个设置可以正常工作 80% 天。但是当出现问题时(例如,我们检测到实时系统中的错误,我们不得不关闭服务器进行维护几个小时。与此同时,移动应用程序在其应用程序中准备好了一个请求队列。所以当我们启用后端时,很多用户同时访问系统。),服务器停止正常运行并开始响应 504 网关超时错误。

令人惊讶的是,每次发生这种情况时,我们发现服务器资源(CPU、内存)空闲了 70-80%,并且数据库中的连接池大部分是空闲的。

知道问题出在哪里吗?如何调试?如果您已经遇到过类似的问题,请分享修复。

谢谢,

标签: djangoamazon-web-servicesnginxtimeoutgunicorn

解决方案


推荐阅读