#2805·ninja

嵌套 cgroup2 的 cpu.max 未被正确读取

作者: nkltz创建于 2026年6月29日更新于 2026年6月29日

目前 ninja 只会从最深层的 cgroup 文件夹中读取 `cpu.max`(在 `/proc/self/cgroup` 中指定)中的 CPU 配额;但是,如果该级别没有 `cpu.max`(因为 cgroup 没有 CPU 控制器),或者读取了 `max 100000`,但父级读取了 `400000 100000`,则父级优先, ninja 无法识别。我们可以获得的最精确的配额是来自具有 `cpu.max` 的任何父级的最小值。在容器构建时会出现问题,每个容器获得机器 RAM 的四分之一和机器核心的四分之一;Kubernetes 创建了嵌套 cgroups, ninja 计算并行度错误,容器在尝试启动 4 倍的 g++ 实例时出现内存不足。

内容来源: ninja-build/ninja