【问题标题】:Docker doesn't get 100% of the CPUDocker 没有得到 100% 的 CPU
【发布时间】:2016-08-22 22:47:39
【问题描述】:

我们刚刚编写了一个 CPU 密集型应用程序来对 Docker 映像进行基准测试。这是一个近似于 Pi 小数的 Java 应用程序。

  • 如果我们运行java -jar superpi.jar,它会向所有核心施加压力并且需要 30 秒
  • 如果我们运行 docker run fewlaps/superpi,它只会对四个核心中的两个核心施加压力,并且需要 70 秒

Docker 映像正在运行 .jar,就像我们在主机上运行它时一样。为什么 Docker 镜像不如本地运行 .jar 快?我们预计在本地运行它和在 Docker 上运行它会有一些差异,但是这个过程需要双倍的时间。

有没有办法要求 Docker 使用所有的 CPU?

顺便说一句,该项目在 GitHub 上发布:Fewlaps/SuperPI

【问题讨论】:

  • 30ms 对于像 JVM 启动/JIT 编译这样繁重的事情来说是相当短的时间。结果如何随着您的基准测试的运行时间而扩展? (这可以让您在基准达到稳定状态之前估算启动开销,无论哪种情况都尽可能快地运行)。
  • 对不起!我完全弄错了结果。我说的是秒,而不是毫秒。感谢@PeterCordes 的快速回答!
  • 这是 Hans 提供的有用链接。如果您使用虚拟机运行 Docker 映像,我还没有想到要问的另一件事。如果是,VM 配置控制 CPU 内核的最大数量。
  • 不,我刚刚安装了 Docker,它并没有要求任何 VM 软件。好像是由 Docker 自己管理的。现在我正在阅读在 virtualbox 上创建 docker-machine 的文档。可能在那里我可以创建一个没有任何 CPU 限制的 docker-machine。

标签: performance docker benchmarking


【解决方案1】:

朋友们,我很惭愧:自己的 MacOS Docker 桌面客户端有一个设置可以启用更多或更少的内核。不知道是不是上个版本加的东西,我没注意。默认情况下,它有两个内核而不是四个内核,这看起来很精明。

屏幕显示如下:

顺便说一下,仅供参考,在同一台机器上:

  • 运行 .jar 需要 64,973 毫秒
  • 运行 .jar 的 Docker 映像需要 83,449 毫秒

【讨论】:

    【解决方案2】:

    MacOS 的 Docker 和 Windows 的 Docker 是您的问题出现的地方。 Docker 还没有在这些平台上本地运行(目前),因此它们的安装程序启动了一个运行 boot2docker 的 VM。这些 VM 由 VirtualBox 控制,并且对分配给 VM 的 CPU 数量有限制。这些限制可以调整,所以我会从那里开始(检查 Docker 实例的 VirtualBox 配置,更改它可能需要重新启动 VM)。

    要正确比较容器的开销,您需要在运行 Docker 主机的 VM 内运行“容器外”测试。或者在物理机器上运行 Linux 的机器上安装 Docker,而不是在虚拟机内部。

    【讨论】:

    • Docker for Mac 和 Docker for Windows 在 VirtualBox 中运行。两者都在管理程序中运行
    • 使用新的 1.12,你是对的。我提到了 VirtualBox,因为 OP 提到了 docker-machine。
    • 根据评论,我刚刚安装了 Docker 几小时前发布的,希望使用最新版本(它被标记为原生应用程序,所以您可以删除“尚未”)
    • 是的,我使用的是最新版本! :-)
    【解决方案3】:

    有很多与 CPU 集和 CPU 份额相关的 Docker 命令行标志。确保那些没有被设置或默认指定。容器运行后,您可以使用docker ps 找到它,并使用docker inspect gloomy_archimedes 之类的内容查看设置,并在HostConfig 部分下查看CpuSharesCpusetCpus 等内容。

    您的 Docker 守护程序本身也可能受到其初始化脚本或 systemd 单元定义的限制。您可以通过查找 Docker 守护进程的 PID 和 cat /proc/1199/status 来检查。查找Cpus_allowed: 应该设置为ff

    或者,如果您在 Windows 或 Apple OS X 上运行 Docker,那么 Docker 将需要使用虚拟机。据我所知,所有 Docker 镜像都需要 Linux 操作系统环境(尽管我认为可能有人正在构建需要 VM 才能在 Linux 上运行的 Windows 镜像)。该虚拟机将具有配置数量的 CPU 内核。您需要找到一种方法来调整它并确保它是您想要的。

    【讨论】:

    • 太棒了!我会看看!这很奇怪,因为我是 Docker 新手,而我安装 Docker 的三台计算机都安装了全新的。但我很高兴看到这不正常。感谢您的回答!当我检查它时我会注意到你:·)
    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 2010-11-16
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2011-08-29
    • 1970-01-01
    相关资源
    最近更新 更多