docker - GOMAXPROCS 在不同平台和容器内部是如何确定的?

标签 docker go cgroups

我很好奇 Go 运行时如何确定 runtime.NumCPU()(CPU 数)在具有截然不同特性的各种平台(如 Linux、macOS 和 Windows)上?

例如在 Linux 上:我很好奇它是否使用 sysfs (/sys) 来查看像 /sys/fs/cgroup/cpu/cpu.cfs_quota_us 这样的路径以确定存在多少个 CPU , 或 procfs (/proc/cpuinfo)(在容器环境中,这将是错误的值,在容器环境中,容器访问的 CPU 数量可能少于此文件中公开的主机 CPU 数量)。

macOS 上类似,这个值是怎么确定的?

我知道像 JVM 这样的一些应用程序依赖于暴露在/sys 上的 cgroups 内存信息来设置它们的内部堆大小等。

最佳答案

CPU 的数量是在运行时评估的,它取决于操作系统。如果你看一下 Go 运行时包,你会看到很多文件 与操作系统和架构名称相关的后缀:

构建 Go 程序时,只会包含与当前操作系统和体系结构相对应的正确运行时文件。然后,函数 getncpu 将评估 CPU 的数量。

关于docker - GOMAXPROCS 在不同平台和容器内部是如何确定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54191055/

相关文章:

docker - 容器如何连接到 docker 主机上的服务?

google-app-engine - 使用 golang 在 google app engine 数据存储上进行 "IN Array"查询

在 docker 容器中运行的 Java(JDK8 更新 131 之前)应用程序 CPU/内存问题?

Docker-compose 标记和推送

Docker 正在运行。 Docker 桌面显示 "Docker Desktop stopped..."

java - 在 Java 8 中,它显示为默认情况下没有选择可用的 4 个收集器 (GC)

kubernetes - 共享容器中容器的CPU限制

c - 如何从cgo中嵌入的C代码调用Go函数

go - interface{} 变量到 []interface{}

docker - docker stats 与 cgroups 的 cpuPercent 指标