【问题标题】:Performance issues AWS - Docker - Django性能问题 AWS - Docker - Django
【发布时间】: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


【解决方案1】:

我认为这是因为将 Http 请求排队到 firebase。我相信您正在循环发送 42000 个 firebase 请求。 I/O 调用本质上是阻塞的。如果您使用 gunicorn 在单线程中运行 Django 应用程序。这 42000 个 http 调用将阻止新调用,直到它们完成。他们将留在队列中,直到连接处于活动状态或请求在 nginx 阈值内。我不认为 42000 推送通知会耗尽内存和处理,除非负载太高。

【讨论】:

    【解决方案2】:

    我认为您的问题与设计有关,您可以尝试使用 SNS 和 SQS(这是 AWS 方式)或 Celery 和 Redis(这是一种传统方式)等方式将推送通知作为异步队列发送

    如果您选择传统方式,这篇文章可以帮助您 https://blog.devartis.com/sending-real-time-push-notifications-with-django-celery-and-redis-829c7f2a714f

    【讨论】:

    • 抱歉我编辑了我的帖子,我们正在使用 Firebase 的移动通知
    【解决方案3】:

    没有为 ec2 实例捕获内存利用率指标,因为 AWS 无法使用操作系统级别的指标。您可以自行收集自定义指标

    参考: https://awscloudengineer.com/create-custom-cloudwatch-metrics-centos-7/

    【讨论】:

    • 我设置了不同的指标,我会及时更新:ibb.co/KLFrpLv 如果是因为内存不足,我应该更改我的实例以获得更多内存吗?或者我应该监控哪个容器使用大量内存并将其放在不同的实例上? (成本方面)
    • 所以我监控了内存,没有什么可担心的。但是当我们发送推送通知时,我检查了“docker stats”,结果如下:ibb.co/xCWxVJf CPU 使用率为 80%。这是否意味着我的实例没有足够的 CPU?
    猜你喜欢
    • 2017-08-22
    • 1970-01-01
    • 2019-10-16
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2021-08-10
    • 1970-01-01
    相关资源
    最近更新 更多