Docker容器未正确使用cpu

Docker容器未正确使用cpu,docker,containers,multiple-processes,Docker,Containers,Multiple Processes,单个docker容器适用于较少数量的并行进程,但当我们将并行进程的数量增加到20-30个时,进程执行会变慢。进程越来越慢,但docker仍然只利用了30-40%的cpu 为了让docker使用适当的cpu,并且不减慢进程,我尝试了以下方法- 我已经明确地将cpu和ram分配给docker容器 我还使用ulimit增加了文件描述符的数量、进程的数量和堆栈大小 即使做了这两件事,容器仍然没有正确地利用cpu。我使用docker exec在一个运行的容器中启动多个进程。有没有什么有效的方法可以使用单个

单个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 ram)

    Docker版本-18.09.7


    Os-Ubuntu18.04

    当你在机器上运行某个东西时,它会消耗以下资源:1。中央处理器2。RAM 3。磁盘I/O 4。网络带宽。如果您的容器耗尽了上面列出的任何一种资源,则其他资源可能无法使用。因此,监控您的系统矩阵以找到根本原因。

    请描述您正在运行的“进程”的性质。可能CPU不是问题所在,但文件I/O、内存、网络、软件依赖项没有针对多核进行优化等等。这些过程只是简单的python脚本,其中包含“print(“hello world”)”代码。由于我使用docker exec来执行,所以我认为网络不会成为问题,而且在8核32 gb ram实例上运行时,只剩下1 gb内存。还有31 gb内存。正在写入“Hello world”?如果CPU使用率在100%左右,这意味着您的服务器正在尝试做超出其容量的工作。这通常是可以的,但这意味着程序可能会慢一点。为什么要100%使用它?为什么不基于同一个映像运行20-30个并行容器?这似乎比使用单个巨型容器和使用
    docker exec
    更好。它只使用了30-40%的cpu,ram不是问题,它只使用了32 gb中的1 gb,而我使用的是docker exec,脚本直接写入docker exec进程的标准输出,所以我认为网络带宽不是问题。我用iotop anf检查了磁盘io,发现它大约为0.2%,所以这也不是问题。