amazon-web-services - 在一个 ECS 任务中创建多少个线程/进程

标签 amazon-web-services amazon-ec2 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 值(value)”的 CPU。但它让我看到了整个实例。

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

这里的最佳做法是什么?程序应该以某种方式知道他们的 ECS 任务预留吗?并根据那个创建线程/进程?这看起来不错,除非你可能没有充分使用一个实例,如果它没有充满繁忙的任务。所以我只是不确定那里什么是最佳的。

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

cpu usage in ECS docs 的讨论.

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

最佳答案

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

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

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

关于amazon-web-services - 在一个 ECS 任务中创建多少个线程/进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52820909/

相关文章:

csv - AWS 数据管道 - 如何使用它进行增量 RDS 数据更新?

amazon-ec2 - 保持 EC2 免费实例免费

amazon-ec2 - 无法在资源 AWS::ECS::Service 上添加标签

amazon-web-services - 调用端点 url 时找不到 AWS API Gateway 404 页面错误

amazon-web-services - 作为角色运行的 Ec2 尝试在 AWS 中获取 session token 时出错

hadoop - 创建没有公网 IP 地址的 EMR 集群

wordpress - AWS EFS 性能下降

c++ - ECS框架如何更新组件数据并通知系统?

python - AWS 容器健康检查

amazon-web-services - 属性 IamInstanceProfile 的值必须为 String 类型