【发布时间】:2020-04-01 13:11:40
【问题描述】:
我在 EC2 实例上使用 docker 部署了一个应用程序:t3a.xlarge。 我的应用程序正在使用 7 个不同的容器(参见图像 docker-ps.png):
- 一个 Django 应用程序,作为一个 API(使用 python 3.6)
- Angular 应用程序(使用 Angular2+)
- memcached 服务器
- 一个cerbot(使用letsencrypt自动更新我的SSL 证书)
- 一个 Nginx,用作反向代理来服务我的 Angular 应用程序和 我的 Django API
- Postgres 数据库
- 一个 Pgadmin 来管理我的数据库
当我们使用 Firebase 向我们的用户(大约 42,000 名用户)发送推送通知时,就会出现问题。 API 在一定时间内没有响应:从 1 分钟到 6 分钟。 Django API 使用带有此配置的网络服务器 Gunicorn (https://gunicorn.org/):
gunicorn xxxx_api.wsgi -b 0.0.0.0:80 --max-requests 500 --max-requests-jitter 50 --enable-stdio-inheritance -k gevent --workers=16 -t 80
服务器或容器从未崩溃。当我检查指标时,我们从未使用超过 60% 的 CPU。以下是发送通知时一些指标的屏幕截图:https://ibb.co/Mc0v7R1
是因为我们使用的带宽超出了我们的实例允许我们使用的带宽吗?还是应该使用其他 AWS 服务?
【问题讨论】:
-
内存?你监控了吗
-
@ArunK 内存指标的名称是什么?
-
未收集内存利用率指标
-
根据您分享的 ibb.co/xCWxVJf,您的 API 使用了 296% 的 CPU :-) API 应该有限制 - 对其处理的请求数量有限制。您需要监控应用程序和 Gunicorn 级别的日志记录,以了解支持的连接是否足够或是否存在其他问题。
-
@nickolay.laptev 296% 表示 API 正在使用 3 个内核,对吗?哪个对我来说是正确的
标签: django python-3.x amazon-web-services amazon-ec2 gunicorn