ECS任务中要创建多少个线程/进程

Phi*_*lip 6 amazon-ec2 amazon-web-services amazon-ecs

一个c5.2xlarge实例具有8个vCPU。如果我运行os.cpu_count()(Python)或std :: thread :: hardware_concurrency()(C ++),则每个实例报告此实例为8。我认为底层硬件可能是一台更大的机器,但是它们告诉我可以使用的功能,这似乎有用且正确。

但是,如果我的ECS任务仅请求2048 CPU(2 vCPU),则在c5.2xlarge计算机上,上述查询仍将获得8。我的理解是,如果其他繁忙的任务正在运行,Docker会将我的任务限制为仅使用“价值2个vCPU”的CPU。但这让我看到了整个实例。

看来这将导致任务创建太多线程/进程。例如,如果我在c5.18xlarge实例上运行2048个CPU任务,则每个任务都将认为它具有72个可用内核。他们都会创建太多的线程/进程。它会工作,但效率低下。

最佳做法是什么?程序应该以某种方式知道其ECS任务保留吗?并据此创建线程/进程?这似乎很好,但是如果实例中没有很多忙碌的任务,您可能会使用不足。因此,我不确定那里是否是最佳选择。

我想根本的问题是Docker将限制使用的CPU总量。但是它无法调整您正在使用的线程/进程的数量。使用太多或太少的线程/进程效率低下。

请参阅ECS文档中有关cpu用法的讨论。

另请参见这篇长博客文章:https : //goldmann.pl/blog/2014/09/11/resource-management-in-docker/

Jos*_*hin 6

虚拟化技术和容器之间存在巨大差异。清楚地了解这些技术将会有所帮助。也就是说,如果您想将应用程序部署在不同的环境中,则应用程序应该是可配置的。

我建议创建一个可选配置,告诉应用程序它只能使用一定数量的 cpu 核心。如果未提供该值,则会退回到自动检测。

一旦您在定义 ECS 任务时有了此选项,您就可以提供此可选配置,这将解决您面临的问题。