django - 对 Nginx 的任何请求的 504 网关超时,具有大量免费资源
问题描述
我们一直在内部维护一个项目,该项目同时具有 Web 和移动应用程序平台。该项目的后端使用 Django 1.9 (Python 3.4) 开发并部署在 AWS 中。
服务器堆栈由 Nginx、Gunicorn、Django 和 PostgreSQL 组成。我们使用基于 Redis 的缓存服务器来处理资源密集型的繁重查询。我们的 AWS 资源包括:
- t1.medium EC2(2 核,4 GB RAM)
- 带有一个额外只读副本的 PostgreSQL RDS。
现在 Gunicorn 设置为创建 5 个工人(通过遵循 2*n+1 规则)。负载方面,每分钟大约有 20-30 个移动用户发出请求,每小时有 5-10 个用户检查 Web 面板。所以我会说,负荷不是很大。
现在这个设置可以正常工作 80% 天。但是当出现问题时(例如,我们检测到实时系统中的错误,我们不得不关闭服务器进行维护几个小时。与此同时,移动应用程序在其应用程序中准备好了一个请求队列。所以当我们启用后端时,很多用户同时访问系统。),服务器停止正常运行并开始响应 504 网关超时错误。
令人惊讶的是,每次发生这种情况时,我们发现服务器资源(CPU、内存)空闲了 70-80%,并且数据库中的连接池大部分是空闲的。
知道问题出在哪里吗?如何调试?如果您已经遇到过类似的问题,请分享修复。
谢谢,
解决方案
推荐阅读
- search - 如何轻松实现选择器:搜索 Meteor,使用 React 而不是 Blaze
- c# - 具有计算属性的 C# DTO
- drools - 我在 Drools 中遇到错误
- kubernetes - 如何将变量传递给 helm install --set 参数
- java - 尝试制作矩形循环时如何解决while循环(处理)中的问题
- python - Python 3.x - 使用 OpenCV 裁剪图像时出错
- apache-kafka - 我可以查看发送到 Kafka 的模式的 ID/版本号吗?用于调试目的
- c - 分段错误错误。我正在尝试解析有效负载并提取值并返回值。我在做什么错误?
- javascript - 无法识别元素显示值
- angular - Nativescript - 获取下载应用程序的用户的邮件/姓名