Назад | Перейти на главную страницу

Готовое к производству приложение Node / React - проблемы с использованием памяти

У меня есть приложение, развернутое на AWS с использованием ECS, и недавно у меня возникли проблемы с использованием памяти.

Чтобы дать вам небольшую предысторию:

  1. Наше приложение - это серверная часть Node.js (в частности, Sails.js) с React, используемым для интерфейса.
  2. В определении задачи ECS мы установили память на 900 и процессор на 600 единиц соответственно.
  3. Тип экземпляра - t2.micro
  4. AMI, который мы используем, оптимизирован для Amazon ECS (похоже, использует Docker Docker версии 18.06.1-ce)
  5. У нас есть одна служба (не разделенная для внешнего / внутреннего интерфейса), работающая на контейнер (для каждого экземпляра EC2)
  6. Обычно выполняется как минимум 2 экземпляра с ALB между ними.
  7. Мы используем DynamoDB и ElastiCache (Redis)

Согласно журналам Cloudwatch, использование памяти колеблется в пределах ~ 50-60%.

Бег process.memoryUsage () на одном из экземпляров выдает следующее:

{ rss: 28999680,
  heapTotal: 7684096,
  heapUsed: 4982976,
  external: 16837 }

Это нормально для производственного приложения Node / React?

Должны ли мы изменить тип экземпляра и увеличить ресурсы?

Использует ли Docker дополнительные ресурсы, которые мы должны учитывать?

Будем очень признательны за любую информацию или рекомендации.

Это нормально для производственного приложения Node / React?

Это действительно зависит от приложения. Приложение hello world будет кардинально отличаться от приложения для глубокого обучения.

Должны ли мы изменить тип экземпляра и увеличить ресурсы?

У вас проблемы с производительностью с точки зрения пользователя? например, зависает ли приложение, пока вы его используете?

Использует ли Docker дополнительные ресурсы, которые мы должны учитывать?

Я так думаю

Будем очень признательны за любую информацию или рекомендации.

Ты проверил Фаргейт? Вот отрывок

Amazon ECS поддерживает AWS Fargate, поэтому вы можете развертывать контейнеры и управлять ими без необходимости выделять серверы или управлять ими. Благодаря Fargate вам больше не нужно выбирать типы инстансов Amazon EC2, выделять и масштабировать кластеры виртуальных машин для запуска контейнеров или планировать запуск контейнеров на кластерах и поддерживать их доступность. Fargate позволяет вам сосредоточиться на создании и запуске приложений, а не на базовой инфраструктуре.