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

原文 标签 docker go cgroups

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

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

同样在macOS上,如何确定该值?

我知道某些应用程序(例如JVM)依赖/ sys上公开的cgroup内存信息来设置其内部堆大小等。

最佳答案

Go GOMAXPROCS是CPU数量的函数。 CPU的数量是处理器架构的函数:386,amd64,arm,arm64,mips64,ppc64,s390等。操作系统提供了到硬件接口(interface):Linux,OpenBSD,Mac OS等。在Linux上,我们有SYS_sched_getaffinity

参见src/runtime中的Go source code

请参阅Linux文档命令man sched_getaffinity

相关文章:

node.js - 为客户端和服务器创建docker文件

go - Golang本机HTTP客户端卡在特定的URI上

go - Golang未定义函数

linux - 有没有办法读取cgroup用于杀死进程的内存计数器?

sql - Oracle 11g Docker SELECT非常慢

mysql - 如何在AWS ECS上部署MySQL docker镜像?

java - 限制Docker容器中的JVM内存消耗

java - Google云端端点产生Java API HTTP 400错误

linux - 将内存分配给其他进程无法在Linux中使用的进程

linux - 由于cgroups配置错误而导致docker启动失败