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

7

我打算将我的 Web 应用程序从 Amazon EC2 迁移到 ECS。(docker) 但在 ECS 中,我们需要为进程分配内存和 vCPU。

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

如何测量进程需要多少个 vCPU 和内存?

谢谢


为什么关闭我的问题? - TheOneTeam
2个回答

2
在任务定义方面,有两种指定内存的方式。内存设置是一个硬限制。如果容器的内存使用量达到此数量,容器将被终止。另一方面,如果您指定了memoryReservation,那么该任务将保留这么多内存,但它可以使用更多,最多可达到机器的总内存量。请查看任务定义文档以获取更多详细信息。
这里需要考虑的一个重要问题是,只需要memorymemoryReservation中的一个。如果两者都使用,则memoryReservation应小于memory。如果您只想指定其中之一,我建议使用memoryReservation,因为它允许您的任务使用机器上的总内存。如果两者都使用,则memoryReservation将用于计算任务消耗的内存量。
关于cpu,这个值是可选的,如果未指定,则实例上的所有任务都可以平等地使用系统中可用的CPU。如果只有一个任务在实例上,则默认情况下它可以使用整个实例的CPU。
更具体地说,1vCPU/1GB Mem EC2等于ECS上的1024。
可以肯定地说,您的服务将大致使用与在EC2上相同的CPU/内存。您可以登录到EC2实例并使用各种工具(htop、ps等)检查此信息,或者在CloudWatch上查看。
例如:如果您当前的应用程序在t2.medium上运行(该实例具有2vCPU和4GB内存)并且仅使用一半的CPU/内存,则您的任务将使用1024 CPU和2048内存。

1
要回答您关于测量的问题:您的ECS将需要至少与您当前的EC2一样多的CPU和内存。监测EC2 CPU和内存使用情况的最佳方法是使用AWS CloudWatch。对于您的特定需求,这是一个好消息/坏消息的答案。
首先是好消息:CPU使用率指标已自动在CloudWatch中跟踪。
按照以下步骤查看您当前实例的CPU使用情况作为图形化指标:
进入AWS控制台,然后在管理工具下选择CloudWatch。在主CloudWatch屏幕上,确保在控制台右上方选择了托管您的EC2实例的区域。现在单击左侧的度量,您将看到时间轴图。在图形下面是您可以选择的指标。单击EC2->每个实例的指标->CPU利用率以查看要查看指标的实例。将时间更改为自定义-> 4周。这将为此实例过去一个月的平均 CPU利用率提供一个图形。
我建议查看过去一个月的最大CPU利用率图。这可以让您了解覆盖新ECS中相同类型CPU活动所需的绝对顶部CPU,其中平均指标可能不是最好的指南。
要在图表上查看最大值,在底部窗格中,单击图形化指标选项卡。在统计列中,将您的行/实例的设置下拉菜单从平均值更改为最大值。
这里显示了我过去4周的最大CPU图。您可以看到顶部仅达到T2.micro实例CPU的25%。这应该有助于确定您需要的ECS大小和百分比CPU。

enter image description here

现在是个坏消息: 使用CloudWatch监控内存使用量不像CPU那样自动设置。简而言之,获取内存指标需要使用传统Perl脚本安装CloudWatch代理的新推荐方式。使用代理,您可以选择最多10个内存指标(在此列出)来跟踪Linux报告并设置正确的IAM设置,以便代理可以将内存指标报告回CloudWatch。 编辑: 我忘记了在2016年写了一个SO答案,其中详细介绍了设置内存监控脚本和在CloudWatch中显示内存指标的步骤和示例仪表板。该答案提到了设置Cloudwatch报警,但运行并向CloudWatch报告的脚本显示内存使用情况。请参考该答案如何设置这些(只需忽略答案中的报警部分)。
但是作为良好的DEVOPS实践,您将希望在所有Linux实例(EC2和ECS)上设置此功能。这将使您可以从控制台主动地和方便地获取内存指标。您希望避免需要SSH进行检查。一旦跟踪,您可以使用控制台在一段时间内绘制内存使用情况图以确定ECS迁移所需的内存量。
希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接