如何为运行 Java 应用程序的多 docker 容器 AWS Elastic Beanstalk 环境动态分配内存

Adi*_*and 9 java amazon-ec2 amazon-web-services kotlin docker

我想从免费的弹性豆茎层中挤出所有可能的使用量。

我的后端构建为一组微服务(使用 ktor)。准确地说,我有5 个微服务。所有这些都是 dockerized,我试图在同一个微型t2.micro(免费)弹性 beanstalk 实例上运行它们,并使用docker图像环境

Java 是 java,它喜欢为每个 docker 容器空闲大约 200 MB RAM,即使是最简单的微服务。

因此,t2.micro 为您提供 1GB RAM。我有 5 个微服务 docker 容器,每个容器至少需要 200 MB = 非常接近。

问题是,内存几乎总是几乎一直在 100% 附近徘徊。

那么,有没有一种方法可以根据空闲的数量以及一个容器对它的迫切需要来动态地为 docker 容器分配内存?

假设一个容器正在做一些繁重的工作,而其他容器大部分都处于空闲状态,我想将一些 RAM 指向执行繁重任务的容器,一旦任务结束,回到每个容器的相等 RAM 分配。

有没有办法做到这一点?

Can*_*ose 1

您可以docker update --memory-reservation xxx <container>在容器运行时更​​改容器的软限制内存分配。当总体内存较低时,Docker 会轻轻地将容器降低到其软限制。因此,您可以为所有容器设置软限制,例如 150 MB,然后当您知道其中一个容器有额外的工作要做时,将其提高。

关于软限制的 docker 文档并不是那么好,CGroup Memory的内核文档解释得更好。