catkin_make 编译卡死?试试重建Swap文件!

举报
云惰雨闲 发表于 2025/10/30 11:48:26 2025/10/30
【摘要】 本文介绍了解决 Ubuntu 20.04 虚拟机中 `catkin_make` 编译卡死的方法,重点讲解了如何重建 Swap 文件,并提供了详细命令与一键脚本。适用于 ROS 开发者及 Linux 用户快速恢复编译能力。

前言

在使用 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 文件

sudo swapoff /swapfile

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

✅ 步骤2:删除旧 Swap 文件

sudo rm /swapfile

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


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

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

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

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

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

sudo truncate -s 4G /swapfile

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


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

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

sudo chmod 600 /swapfile

✅ 格式化为 Swap 空间

sudo mkswap /swapfile

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

✅ 启用 Swap 文件

sudo swapon /swapfile

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


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

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

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

✅ 检查是否添加成功:

sudo swapon --show
free -h

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


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

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

#!/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,然后执行:

chmod +x setup_swap.sh
./setup_swap.sh

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


总结

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

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

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。