配置交换分区(可选,建议)
openUBMC 组件数量较多,编译过程内存占用大(系统要求建议交换分区 32GB)。物理内存不足时,可通过创建 swap 文件配置交换分区,避免编译期间因 OOM 被终止进程。
Docker 场景推荐使用交换分区:容器默认不限制内存,编译容器(如 bingo 并行构建)内存峰值高,一旦宿主机内存耗尽会触发 OOM 直接终止容器导致编译中断。配置 swap 后,未设置内存上限的容器默认即可使用宿主 swap,内存不足时自动兜底,避免容器被 OOM 终止。仅当容器显式设置了内存上限(
-m)时,才需额外设置--memory-swap=-1才允许容器使用宿主 swap。
检查运行中的容器是否设置了内存上限:
# 返回 0 表示未限制,返回具体数值(字节)表示已设置上限
docker inspect <容器名> --format '{{.HostConfig.Memory}}'
# 或用 docker stats 查看内存 LIMIT 列
docker stats <容器名>
以创建 4 个 8GB swap 文件(共 32GB)为例:
# 创建 4 个 8GB swap 文件并启用
for i in 1 2 3 4; do
sudo dd if=/dev/zero of=/swapfile${i} bs=1M count=8192
sudo chmod 600 /swapfile${i}
sudo mkswap /swapfile${i}
sudo swapon /swapfile${i}
done
swap 文件路径和大小可按磁盘空间调整,建议放在空间充足的分区。
持久化配置:
验证配置是否生效:
sudo swapon -a
swapon --show
free -h
swapon --show 能列出 4 个 swap 文件即配置成功,再用 free -h 确认 Swap 总容量为 32G。
swap 本质是磁盘空间,仅用于运行时内存(RAM)耗尽时存放暂时用不到的内存页,性能远低于物理内存。只有 RAM 和 swap 全部用尽时,系统才会触发 OOM 终止进程。磁盘空间充足的场景建议优先扩充物理内存(运行时内存)(如加装内存条、WSL 上调大 .wslconfig 的 memory=),使编译进程尽可能运行在 RAM 中;若希望编译进程少用 swap(避免变慢),可通过调低 vm.swappiness 减少 swap 使用。
