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

简介: 在Ubuntu 20.04虚拟机中,使用ROS的catkin_make编译时卡顿、内存不足等问题常由Swap配置不当引起。本文详解如何重建Swap文件以优化系统资源调度,提升编译效率,适用于ROS开发者及系统维护人员。

前言

在使用 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 编译过程频繁卡顿甚至失败。

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

相关文章
|
并行计算 Linux
linux deepin 23 下cuda11.2和paddlepaddle2.3.2-gpu安装
linux deepin 23 下cuda11.2和paddlepaddle2.3.2-gpu安装
735 0
|
传感器 自动驾驶 机器人
大疆Livox Mid360 使用指南
本文是大疆Livox Mid-360激光雷达的使用指南,包括Livox Viewer 2的安装与使用、Livox SDK2的安装与演示、Livox ROS的配置与启动,以及一些使用时的注意事项。文章还提供了关于Livox Mid-360的详细特点、接线信息、尺寸信息、主控端IP设置、修改Livox Mid 360的IP方法、坐标系定义和IMU内参的介绍。此外,还提供了官方资料和软件下载的链接。
10957 2
|
Linux Shell 开发者
关于Linux上的$ORIGIN解说
适当应用 `$ORIGIN`,你的应用程序将更加灵活,更易于分发和部署。
741 5
|
网络协议 数据安全/隐私保护 网络架构
如何在家中使用手机或电脑远程控制公司iStoreOS软路由下的电脑桌面
如何在家中使用手机或电脑远程控制公司iStoreOS软路由下的电脑桌面
939 4
|
虚拟化
【虚拟机】VMware 扩展硬盘大小提示 指定的虚拟磁盘需要进行修复
【虚拟机】VMware 扩展硬盘大小提示 指定的虚拟磁盘需要进行修复
1841 1
|
机器学习/深度学习 数据采集 算法
【Python机器学习】PCA降维算法讲解及二维、高维数据可视化降维实战(附源码 超详细)
【Python机器学习】PCA降维算法讲解及二维、高维数据可视化降维实战(附源码 超详细)
1126 3
|
Linux Python
linux中运行sudo rosdep init遇到的一些问题和解决方案
linux中运行sudo rosdep init遇到的一些问题和解决方案
|
数据安全/隐私保护 数据格式 Python
python爬取快手商品数据
python爬取快手商品数据
1232 1
|
机器学习/深度学习 传感器 算法
【LSTM分类】基于白鲸算法优化双向长短期记忆神经网络的数据分类预测附matlab代码 BWO-BiLSTM
【LSTM分类】基于白鲸算法优化双向长短期记忆神经网络的数据分类预测附matlab代码 BWO-BiLSTM
|
机器学习/深度学习 传感器 人工智能
3D目标检测中点云的稀疏性问题及解决方案
点云的稀疏性指激光雷达的采样点覆盖相对于场景的尺度来讲,具有很强的稀疏性。例如,将目前主流的户外3D目标检测数据集KITTI[1]的点云投影到对应的RGB图像上,大约只有3%的像素才有对应的点云;VoxelNet[2]将获取的点云等间距的划分到体素空间,超过90%的体素是空的。稀疏性产生的原因包括远距离、遮挡和反光等。
3D目标检测中点云的稀疏性问题及解决方案