我们如何衡量Amazon ECS / Ec2实例的vCPU使用情况?

时间:2018-05-18 02:22:00

标签: linux amazon-web-services amazon-ec2 devops amazon-ecs

我要将我的webapp从Amazon EC2迁移到ECS。 (docker)但是在ECS中,我们需要为进程分配内存和vCPU。

但我不确定应该为该任务分配多少vCPU。 (以及记忆)

如何衡量流程需要多少vCPU和内存?

由于

2 个答案:

答案 0 :(得分:2)

当涉及到任务定义时,有两种指定内存的方法。内存设置是一个硬限制。如果容器内存使用量达到此数量,则容器将被终止。另一方面,如果指定memoryReservation,那么将为该任务保留大量内存,但它可以使用更多内存,最多可达到计算机的总量。查看Task Definition documentation了解更多详情。

这里一个重要的考虑因素是只需要memorymemoryReservation中的一个。如果两者都使用,memoryReservation应小于memory。如果您只是要指定其中一个,我建议memoryReservation,因为它将允许您的任务最多使用机器上的总内存。如果两者都使用,memoryReservation将用于计算任务消耗的内存量。

对于cpu,此值不是必需的,如果未指定,则允许实例上的所有任务在系统上可用的CPU的相等部分。如果实例上只有一个任务,则默认情况下它可以使用实例的整个CPU。

为了更具体一点,在ECS上1vCPU / 1GB Mem EC2等于1024。

可以肯定地说,您的服务将大致使用与EC2相同的CPU /内存。您可以登录EC2实例并使用各种工具(htop,ps,...)进行检查,或者在CloudWatch上查看。

实施例: 如果您当前的应用程序运行在t2.medium(具有2vCPU和4GB内存)并且仅使用一半的CPU /内存,那么您的任务将使用1024 CPU和2048内存。

答案 1 :(得分:1)

回答有关测量的问题:您的ECS至少需要与当前EC2一样多的CPU和内存。测量和监控EC2 CPU和内存使用情况的最佳方法是使用AWS CloudWatch。根据您的具体需求,这是一个好消息/坏消息。

首先是好消息:已经使用CloudWatch自动跟踪CPU使用率指标。

按照以下步骤查看当前的CPU使用情况,作为实例的图表指标。

进入您的AWS控制台,然后在管理工具下选择CloudWatch。在CloudWatch主屏幕上,确保在控制台右上角选择了托管EC2实例的区域。现在单击左侧的度量标准,您将看到时间轴图。图表下方是您可以选择的指标。单击EC2-> Per Instnace Metrics->要查看其度量标准的实例的CPUUtilization。将时间更改为自定义 - > 4周。这将为您提供此实例上个月平均 cpu利用率的图表。

我建议查看上个月的最大 CPUUtilization图表。这可以让您了解覆盖新ECS中相同类型CPU活动所需的绝对顶级CPU,其中平均指标可能不是最佳指南。

要查看图表上的最大值,请在底部窗格中单击绘制的指标标签。在统计信息列中,将行/实例的设置下拉从平均值更改为最大值。

此处显示过去4周最大CPU的图表。您可以看到顶部几乎没有达到T2.micro实例的25%的CPU。这可以帮助您确定ECS所需的CPU大小和百分比。

enter image description here

现在的坏消息:使用CloudWatch监控内存使用情况并不像CPU那样自动设置。简而言之,获取内存指标需要使用legacy perl scripts installing the CloudWatch agent的新推荐方式。使用代理,您可以选择最多10个内存指标(listed here),以便Linux报告并设置正确的IAM设置,以便代理可以将内存指标报告回CloudWatch。

编辑:我忘了我在2016年编写了an SO answer,其中包含设置内存监控脚本的步骤以及在CloudWatch中显示内存指标的示例仪表板。答案提到设置Cloudwatch警报,但运行并向CloudWatch报告的脚本显示内存使用情况。请参考有关如何设置这些内容的答案(只需忽略答案的警报部分)。

但是作为良好的DEVOPS实践,您需要在所有Linux实例(EC2和ECS)上进行设置。这将允许您从控制台主动并可随时获取内存指标。您希望避免使用SSH进行检查。跟踪后,您可以使用控制台绘制一段时间内的内存使用情况,以确定您的ECS迁移所需的数量。

希望这有帮助。