【发布时间】:2019-07-18 05:56:26
【问题描述】:
单个 docker 容器对于较少数量的并行进程运行良好,但是当我们将并行进程的数量增加到 20-30 时,进程执行速度会变慢。进程变慢了,但 docker 仍然只使用了 30-40% 的 cpu。
我尝试了以下方法让 docker 使用适当的 cpu 并且不减慢进程 -
- 我已将 cpu 和 ram 明确分配给 docker 容器。
- 我还使用 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