【问题标题】:Docker container not utilizing cpu properlyDocker 容器没有正确使用 CPU
【发布时间】:2019-07-18 05:56:26
【问题描述】:

单个 docker 容器对于较少数量的并行进程运行良好,但是当我们将并行进程的数量增加到 20-30 时,进程执行速度会变慢。进程变慢了,但 docker 仍然只使用了 30-40% 的 cpu。

我尝试了以下方法让 docker 使用适当的 cpu 并且不减慢进程 -

  1. 我已将 cpu 和 ram 明确分配给 docker 容器。
  2. 我还使用 ulimit 增加了文件描述符数、进程数和堆栈大小。

即使在做了这两件事之后,容器仍然没有正确利用 cpu。我正在使用 docker exec 在单个运行的容器中启动多个进程。有没有什么有效的方法可以使用单个 docker 容器来执行多个进程或让容器使用 100% 的 cpu?

我使用的配置是

服务器 - aws ec2 t2.2Xlarge(8 核,32 GB 内存)

Docker 版本 - 18.09.7

Os-ubuntu 18.04

【问题讨论】:

  • 请描述您正在运行的“进程”的性质。可能 CPU 不是问题,而是文件 I/O、内存、网络、软件依赖项未针对多核优化等等……
  • 进程只是简单的 python 脚本,其中包含“print("hello world")”代码。因为我正在使用 docker exec 来执行,所以我 thunk 网络不会成为问题,而且只有 1 GB 的内存被使用,当我在 8 核 32 GB ram 实例上运行它时,还剩下 31 GB。
  • “Hello world”正在写入?
  • 如果 CPU 使用率在 100% 左右,这意味着您的服务器正在尝试执行超出其能力的工作。这通常没问题,但这意味着程序可能会慢一点。为什么要 100% 使用?
  • 为什么不基于同一个镜像运行 20-30 个并行容器?这似乎比拥有一个大型容器并使用docker exec 更好。

标签: docker containers multiple-processes


【解决方案1】:

当您在机器上运行某些东西时,它会消耗以下资源:1。 CPU 2. RAM 3. 磁盘 I/O 4. 网络带宽。如果您的容器正在耗尽上面列出的任何一种资源,则其他资源可能会耗尽。因此,请监控您的系统矩阵以找出根本原因。

【讨论】:

  • 它只使用了 30-40% 的 cpu,ram 不是问题,它只使用了 32 gb 中的 1 gb,因为我正在使用 docker exec 并且脚本直接写入docker exec 进程的标准输出,所以我认为网络带宽不是问题。我用 iotop anf 检查了磁盘 io,发现它在 0.2% 左右,所以这也不是问题。
猜你喜欢
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 2022-09-29
  • 2018-08-15
相关资源
最近更新 更多