【问题标题】:How many CPUs does my docker container have?我的 docker 容器有多少个 CPU?
【发布时间】:2018-08-15 12:26:57
【问题描述】:

我正在编写一个并行运行的库。这个库经常在 docker 容器中使用。我想启动与我的 docker 容器分配的内核一样多的线程。

docker 是否将 CPU 限制设置为环境变量?

例如,如果我的用户在创建容器时设置了两个 CPU:

docker run --cpuset-cpus="2" myapp:latest

(见this question)

如何通过检查容器的状态从容器中取回号码2?

【问题讨论】:

  • 我知道除了下面的答案中列出的解决方案之外没有其他解决方案

标签: docker


【解决方案1】:

如果您需要从 .Net 应用程序中获取处理器数量,您可以调用

Environment.ProcessorCount

来自https://blog.markvincze.com/troubleshooting-high-memory-usage-with-asp-net-core-on-kubernetes/:

在我的机器上,只运行 dotnet run,值为 4。
在我的机器上,使用 Docker,它是 1。
在 Google Cloud Kubernetes 上是 8。

【讨论】:

    【解决方案2】:

    使用--cpuset-cpus="2",您实际上使用了 1 个 CPU。例如,如果您有 4 个可用:{0,1,2,3},您必须通过用逗号分隔它们或定义一个范围来指定其中的 2 个。来自docs:

    --cpuset-cpus

    限制容器可以使用的特定 CPU 或内核。如果您有多个 CPU,则容器可以使用的逗号分隔列表或连字符分隔的 CPU 范围。第一个 CPU 编号为 0。有效值可能是 0-3(使用第一个、第二个、第三个和第四个 CPU)或 1,3(使用第二个和第四个 CPU)。

    答案:

    • 获取可用处理单元的数量:nproc
    • 获取 cpu 集:/sys/fs/cgroup/cpuset/cpuset.cpus

    小例子如下:

    1. 主持人:

      $ nproc
      4
      
    2. 1 个 cpu 的容器:

      $ docker run --rm -it --cpuset-cpus="2" ubuntu
      root@73844de506db:/# nproc
      1
      root@73844de506db:/# cat /sys/fs/cgroup/cpuset/cpuset.cpus
      2
      
    3. 具有 3 个 CPU 的容器:

      $ docker run --rm -it --cpuset-cpus="0-2" ubuntu
      root@4c3f841e613b:/# nproc
      3
      root@4c3f841e613b:/# cat /sys/fs/cgroup/cpuset/cpuset.cpus
      0-2
      

    【讨论】:

      【解决方案3】:

      /proc/cpuinfo、/proc/meminfo 等文件没有命名空间。在容器中,最好的方法是检查 /sys/fs/cgroup/cpuset/cpuset.cpus 是否有可用的 CPU

      【讨论】:

        【解决方案4】:

        Docker 容器在设计上是与底层主机系统隔离的,所以你不应该问 Docker“我有多少 CPU 内核”。

        使用 /proc/cpuinfo 似乎对我不起作用,它总是告诉我容器内有 1 个 cpu。

        在 Github 上查看 this issue 描述了以迂回方式解决问题的过程。最终,此方法会查看 cgroup 以确定哪些内核可用,我认为这对您有用:

        cat /sys/fs/cgroup/cpuset/cpuset.cpus

        【讨论】:

          猜你喜欢
          • 2016-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-01
          • 1970-01-01
          • 2021-03-29
          相关资源
          最近更新 更多