前言

在使用 ROS(Robot Operating System)进行开发时,catkin_make 是我们最常使用的编译命令之一。然而,在 Ubuntu 20.04 的虚拟机环境中,一些用户可能会遇到 catkin_make 编译过程中出现卡死、卡顿或内存不足的问题。

这类问题往往与系统的交换空间(Swap)配置不当有关。本文将从问题现象出发,详细讲解如何通过重建 Swap 文件来提升系统资源调度能力,从而解决编译过程中的卡顿问题。

水之积也不厚,则其负大舟也无力。


第一章:问题现象|为何 catkin_make 总是卡住?

当你在 Ubuntu 20.04 的虚拟机中执行 catkin_make 命令时,可能会遇到以下情况:

  • 终端长时间无响应;
  • 系统提示内存不足(Out of memory);
  • CPU 使用率低,但进程不推进;
  • 风扇狂转,系统变慢甚至崩溃;

这些表现背后,很可能是因为你的系统没有设置合理的 交换空间(Swap) 。当物理内存不足以支撑编译任务时,系统无法有效利用磁盘作为临时缓存,导致程序停滞。

ROS 项目通常包含大量依赖和并行编译任务,对内存需求较高。而虚拟机环境本身资源有限,如果没有合适的 Swap 支撑,很容易陷入“编译困局”。


第二章:什么是 Swap?为什么它对编译如此重要?

Swap 可以理解为操作系统用于补充物理内存的“备用仓库”。当内存吃紧时,系统会把一部分不常用的数据转移到 Swap 中,腾出空间给关键任务。

ROS 编译过程中,catkin_make 会同时运行多个编译任务,占用大量内存。如果没有足够的 Swap 支撑,轻则卡顿,重则崩溃。

“磨刀不误砍柴工。”
为你的 Ubuntu 设置合适的 Swap,是保障高效编译的第一步。


第三章:完整修复步骤|重建 Swap 文件,释放系统潜能

如果你当前的 Swap 配置不合理或文件损坏,建议按照以下步骤彻底重建 Swap 文件:

✅ 步骤1:禁用当前 Swap 文件

Bash
sudo swapoff /swapfile

这一步是为了确保你可以安全地移除旧的 Swap 文件,避免冲突。

✅ 步骤2:删除旧 Swap 文件

Bash
sudo rm /swapfile

清理掉可能已损坏或配置错误的旧文件,为新 Swap 文件腾出位置。


第四章:创建新的 Swap 文件|两种方式任选其一

🧱 方法一:使用 dd 创建(更兼容但较慢)

Bash
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096

该方法通过逐块写入生成 Swap 文件,稳定性高,适合老旧系统或硬盘性能较好的场景。

🔨 方法二:使用 truncate 快速创建(推荐)

Bash
sudo truncate -s 4G /swapfile

该方法几乎瞬间完成,效率更高,适合大多数现代文件系统。


第五章:设置权限与格式化|让系统识别你的 Swap 文件

✅ 设置访问权限(仅 root 可读写)

Bash
sudo chmod 600 /swapfile

✅ 格式化为 Swap 空间

Bash
sudo mkswap /swapfile

这一步是关键,它将普通文件转化为系统可识别的交换空间。

✅ 启用 Swap 文件

Bash
sudo swapon /swapfile

此时系统即可立即使用新增的 Swap 空间。


第六章:永久生效|让 Swap 文件重启后依然可用

为了让 Swap 文件在每次开机后自动启用,请将其加入 /etc/fstab 文件:

Bash
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

✅ 检查是否添加成功:

Bash
sudo swapon --show
free -h

如果输出中显示 /swapfile 已激活,并且大小为 4GB,说明配置已经生效。


第七章:一键部署|编写脚本快速完成所有操作

为了简化流程,你可以将上述命令整合为一个脚本,实现一键修复:

Bash
#!/bin/bash
sudo swapoff /swapfile
sudo rm /swapfile

# 推荐使用 truncate 快速创建
sudo truncate -s 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 写入 fstab,确保重启后生效
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 查看状态确认成功
sudo swapon --show
free -h

📌 将以上内容保存为 setup_swap.sh,然后执行:

Bash
chmod +x setup_swap.sh
./setup_swap.sh

即可一次性完成全部配置。


总结

Ubuntu 虚拟机中运行 ROS 项目时,Swap 文件是不可或缺的一环。若 Swap 不足或配置异常,就会导致 catkin_make 编译过程频繁卡顿甚至失败。

“知己知彼,百战不殆。”
掌握系统的资源调度机制,才能真正掌控你的开发节奏。

By 天海牧歌

东庵每见西庵雪,下涧长流上涧泉。 半夜白云消散后,一轮明月到窗前。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注