我有一个使用 ECS 部署在 AWS 上的应用程序,最近遇到一些内存利用率问题。
先介绍一下背景:
- 我们的应用程序使用 Node.js(特别是 Sails.js)作为后端,使用 React 作为前端
- 在 ECS 任务定义中,我们分别将内存设置为 900 个单位,将 CPU 设置为 600 个单位
- 实例类型为 t2.micro
- 我们使用的 AMI 是针对 Amazon ECS 优化的(似乎使用 Docker Docker 版本 18.06.1-ce)
- 我们每个容器(每个 EC2 实例)运行一项服务(不区分前端/后端)
- 通常至少有 2 个实例在运行,中间有 ALB
- 我们使用 DynamoDB 和 ElastiCache (Redis)
根据 Cloudwatch 日志,内存利用率徘徊在 50-60% 左右。
跑步进程.memoryUsage()在其中一个实例上产生以下内容:
{ rss: 28999680,
heapTotal: 7684096,
heapUsed: 4982976,
external: 16837 }
对于生产 Node/React 应用来说,这正常吗?
是否必须修改实例类型并增加资源?
Docker 是否还使用了我们必须考虑的额外资源?
任何见解或建议都将不胜感激。
答案1
对于生产 Node/React 应用来说,这正常吗?
这确实取决于应用程序。Hello World 应用程序与深度学习训练应用程序截然不同。
是否必须修改实例类型并增加资源?
从用户角度来看,您是否面临性能问题?例如,应用程序在您使用时是否挂起?
Docker 是否还使用了我们必须考虑的额外资源?
我认为是这样
任何见解或建议都将不胜感激。
你检查了吗法尔盖特?以下是摘录
Amazon ECS 具有 AWS Fargate,因此您无需预置或管理服务器即可部署和管理容器。使用 Fargate,您不再需要选择 Amazon EC2 实例类型、预置和扩展虚拟机集群来运行容器或安排容器在集群上运行并维护其可用性。Fargate 使您能够专注于构建和运行应用程序,而不是底层基础设施。