当前位置: 首页 > news >正文

Ubuntu创建修改 Swap 文件分区的步骤——解决嵌入式开发板编译ROS2程序卡死问题

Ubuntu创建修改 Swap 文件分区的步骤——解决嵌入式开发板编译ROS2程序卡死问题

  • 1. 问题描述
  • 2. 创建 / 修改 Swap 分区
    • 2.1 创建 Swap 文件 (推荐)
    • 2.2 使用 Swap 分区 (如果已经存在)
  • 3. 注意事项

同步发布在个人笔记Ubuntu创建修改 Swap 文件分区的步骤——解决嵌入式开发板编译ROS2程序卡死问题

1. 问题描述

在 RISC-V 的嵌入式开发板上部署 open_vins 方案的时候,编译过程会导致板子直接卡死。尝试使用限制编译使用 cpu 核心数后仍然无法解决。
限制编译使用 cpu 核心

colcon build --parallel-workers 4	# 只使用4核
colcon build --executor sequential   # 禁用并行编译

然而仍然无法解决问题,使用 htop 工具后发现,原来是编译过程会将板载 8G 内存全部占满,之后理所当然就卡死了。同时发现板子系统是没有 Swap 分区的。
于是准备设置一个 8G 的 Swap 分区来解决这个问题。

2. 创建 / 修改 Swap 分区

在 Ubuntu 上设置 Swap 区有几种方式,取决于你是否已经有 Swap 分区,或者需要创建一个 Swap 文件。下面分别介绍这两种情况:

2.1 创建 Swap 文件 (推荐)

这种方法不需要重新分区,比较灵活,推荐使用。

  1. 创建 Swap 文件:

    首先,你需要创建一个指定大小的 Swap 文件。例如,创建一个 8GB 的 Swap 文件:

    sudo fallocate -l 8G /swapfile
    

    如果你的系统不支持 fallocate,可以使用 dd 命令:

    sudo dd if=/dev/zero of=/swapfile bs=1024 count=2048k
    
    • bs=1024 表示块大小为 1024 字节。
    • count=2048k 表示创建 2048 * 1024 KB = 2GB 的文件。

    如果系统已经有 Swap 文件的话,建议先关闭 Swap 并删除旧文件。

    sudo swapoff /swapfile 		# 关闭 Swap
    sudo rm /swapfile			# 删除 Swap 文件
    
  2. 设置 Swap 文件权限:

    为了安全,需要设置 Swap 文件的权限,只有 root 用户才能读写:

    sudo chmod 600 /swapfile
    
  3. 格式化为 Swap 文件:

    将文件格式化为 Swap 文件系统:

    sudo mkswap /swapfile
    
  4. 启用 Swap 文件:

    启用 Swap 文件:

    sudo swapon /swapfile
    
  5. 设置开机自动挂载:

    为了让 Swap 文件在系统启动时自动挂载,需要编辑 /etc/fstab 文件:

    sudo nano /etc/fstab
    

    在文件末尾添加以下行:

    /swapfile swap swap defaults 0 0
    

    保存并关闭文件。

  6. 验证 Swap 是否生效:

    使用以下命令验证 Swap 是否生效:

    sudo swapon --show
    

    或者:

    free -h
    

    如果看到 /swapfile 出现在 swapon --show 的输出中,或者 free -h 的输出中 Swap 的大小不为 0,则说明 Swap 文件已经成功启用。

  7. 调整 Swappiness (可选):

    Swappiness 是一个内核参数,用于控制系统使用 Swap 的积极程度。它的值范围是 0 到 100。

    • 0 表示尽可能避免使用 Swap。
    • 100 表示积极使用 Swap。

    默认值通常是 60。你可以根据自己的需求调整 Swappiness。例如,将其设置为 10:

    sudo sysctl vm.swappiness=10
    

    要永久修改 Swappiness,需要编辑 /etc/sysctl.conf 文件:

    sudo nano /etc/sysctl.conf
    

    在文件末尾添加以下行:

    vm.swappiness=10
    

    保存并关闭文件。然后运行以下命令使配置生效:

    sudo sysctl -p
    

2.2 使用 Swap 分区 (如果已经存在)

如果你的系统已经有 Swap 分区,可以使用以下步骤启用它:

  1. 查找 Swap 分区:

    使用以下命令查找 Swap 分区:

    sudo blkid
    

    查找类型为 “swap” 的分区,例如:

    /dev/sda2: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="swap"
    
  2. 启用 Swap 分区:

    使用 swapon 命令启用 Swap 分区,将 /dev/sda2 替换为你的 Swap 分区:

    sudo swapon /dev/sda2
    
  3. 设置开机自动挂载:

    确保 /etc/fstab 文件中包含 Swap 分区的配置,如果没有,添加以下行:

    UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx swap swap defaults 0 0
    

    xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 替换为你的 Swap 分区的 UUID。

  4. 验证 Swap 是否生效:

    使用以下命令验证 Swap 是否生效:

    sudo swapon --show
    

    或者:

    free -h
    

    如果看到你的 Swap 分区出现在 swapon --show 的输出中,或者 free -h 的输出中 Swap 的大小不为 0,则说明 Swap 分区已经成功启用。

3. 注意事项

  • Swap 大小: Swap 大小取决于你的系统内存大小和使用情况。一般来说,如果你的内存小于 4GB,建议 Swap 大小为内存的两倍。如果你的内存大于 4GB,建议 Swap 大小为内存的一半或相等。
  • SSD 上的 Swap: 在 SSD 上使用 Swap 会减少 SSD 的寿命。如果你的内存足够大,可以考虑减少 Swappiness 或完全禁用 Swap。
  • 安全性: 确保 Swap 文件的权限设置为 600,以防止其他用户访问 Swap 数据。
http://www.lqws.cn/news/189163.html

相关文章:

  • 使用 Docker Compose 部署 Jenkins(LTS 版)持续集成环境
  • JAVA-什么是JDK?
  • TP6 实现一个字段对数组中的多个值进行LIKE模糊查询(OR逻辑)
  • HTTP协议
  • 影楼精修-AI衣服祛褶皱算法解析
  • LLM Agent 如何颠覆股价预测的传统范式
  • PL/SQLDeveloper中数值类型字段查询后显示为科学计数法的处理方式
  • 高效复用 Cursor 请求,提升开发效率 —— 使用 interactive-feedback-mcp 工具详解
  • 三维GIS开发cesium智慧地铁教程(4)城市白模加载与样式控制
  • Python 训练营打卡 Day 45
  • 【001】frida API分类 总览
  • css元素的after制作斜向的删除线
  • 飞云智能波段主图+多空短线决策副图指标,组合操盘技术图文解说
  • SpringCloud学习笔记-2
  • 【Elasticsearch】映射:Nested 类型
  • day46python打卡
  • 【Linux】虚拟机代理,自动化脚本修改~/.bashrc
  • vue3子组件获取并修改父组件的值
  • 【计算机网络】非阻塞IO——poll实现多路转接
  • 【佳易王个体诊所电子处方软件】助力智慧诊疗! #医疗数字化 #电子处方效率提升
  • 【 知你所想 】基于ernie-x1-turbo推理模型实现趣味猜心游戏
  • QT自定义资源管理器
  • 使用UDP连接ssh
  • maven私服
  • vanna+deepseek+chainlit 实现自然语言转SQL的精度调优
  • Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
  • MySQL 性能调优入门 - 慢查询分析与索引优化基础
  • 行业案例 | ASOS 借助 Azure AI Foundry(国际版)为年轻时尚爱好者打造惊喜体验
  • [electron]预脚本不显示内联script
  • AIGC 基础篇 Python基础 01