我正在尝试优化和整合我们的 AWS 实例。其中一部分涉及标准化(尽可能)我们的实例类别,以最佳地利用预留。
我们有许多使用 m5d 级 EC2 的应用程序,它们使用临时存储来获得超快的交换空间。我们还有许多 ECS 集群,它们目前使用 r5 级 EC2。
我想知道是否有人知道交换空间对 ECS 集群实例是否有用?如果 docker 能够有效地使用交换空间,那么这可能意味着我们可以使用更便宜的通用“d”实例,而不必使用更大更昂贵的“r5”类实例。
答案1
使用 ECS 时,您必须指定内存预留对于每个任务,ECS 不会让您超额使用可用内存。例如,如果您的实例有 4GB RAM,并且您为操作系统占用了一点(例如 0.5GB),那么您还有 3.5GB 可用于您的任务。您可以创建 1.5GB 任务和 2GB 任务,但不能有 2x 2GB 任务。
这意味着交换空间几乎从未在 ECS 节点上使用 - 任务应该适合可用内存。
也值得怀疑的是r5比m5d- 这取决于您是否受到 CPU 或 RAM 的限制。截至今天r5.大号16GB RAM 每小时成本为 0.126 美元,而同类m5d.xlarge16GB RAM 的价格为 0.226 美元/小时 - 相当贵。M5D 可同时获得 RAM、CPU 和磁盘,因此比 RAM 优化的 R5 级更贵。
如果我是你,我会看看AWS 储蓄计划与预留实例相比,这为您提供了更高的灵活性。您可以选择实例类、大小,甚至可以在 Fargate 中运行容器。
希望有帮助:)
答案2
交换空间对于 ECS 集群实例很有用,或者至少可以使用。您可以找到Amazon ECS 开发人员指南中有一份相当不错的文档。
基本上,您可以使用两个任务定义参数来控制交换使用情况:maxSwap
和swappiness
。即使您不提供任何这些参数,默认情况下 ECS 也会使用交换空间。为了避免交换使用,您需要将值设置为0
。