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

news2025/6/8 15:39:24

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.coloradmin.cn/o/2404271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】通用统计数据结构及其更新函数(最值、变化量、总和、平均数、方差等)

【C语言】通用统计数据结构及其更新函数(最值、变化量、总和、平均数、方差等) 更新以gitee为准: gitee 文章目录 通用统计数据结构更新函数附录:压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 大小端转换什…

Spring AI(10)——STUDIO传输的MCP服务端

Spring AI MCP(模型上下文协议)服务器Starters提供了在 Spring Boot 应用程序中设置 MCP 服务器的自动配置。它支持将 MCP 服务器功能与 Spring Boot 的自动配置系统无缝集成。 本文主要演示支持STDIO传输的MCP服务器 仅支持STDIO传输的MCP服务器 导入j…

Sklearn 机器学习 缺失值处理 填充数据列的缺失值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 💡使用 Scikit-learn 处理数据缺失值的完整指南 在机器学习项目中,数据缺失是不可避…

猜字符位置游戏-position gasses

import java.util.*;public class Main {/*字符猜位置游戏;每次提交只能被告知答对几个位置;根据提示答对的位置数推测出每个字符对应的正确位置;*/public static void main(String[] args) {char startChar A;int gameLength 8;List<String> ballList new ArrayList&…

宝塔安装配置FRP

FRP&#xff08;Fast Reverse Proxy&#xff09;作为一款高性能的反向代理应用&#xff0c;能够帮助我们轻松实现内网穿透&#xff0c;将内网服务暴露到公网&#xff0c;满足远程访问、开发调试等多种需求。宝塔面板以其简洁易用的界面和强大的功能&#xff0c;成为众多站长和开…

元器件基础学习笔记——结型场效应晶体管 (JFET)

场效应晶体管&#xff08;Field Effect Transistor&#xff0c;FET&#xff09;简称场效应管&#xff0c;是一种三端子半导体器件&#xff0c;它根据施加到其其中一个端子的电场来控制电流的流动。与双极结型晶体管 &#xff08;BJT&#xff09; 不同&#xff0c;场效应晶体管 …

tableau 实战工作场景常用函数与LOD表达式的应用详解

这是tableau实战工作场景图表制作第七期--常用函数与LOD表达式的应用 数据资源已经与这篇博客捆绑&#xff0c;有需要者可以下载通过网盘分享的文件&#xff1a;3.2-8月成交数据.xlsx等3个文件 链接: https://pan.baidu.com/s/17WtUoZTqzoNo5kTFjua4hw?pwd0623 提取码: 06…

《PyTorch:开启深度学习新世界的魔法之门》

一、遇见 PyTorch:深度学习框架新星登场 在当今的技术领域中,深度学习已然成为推动人工智能发展的核心动力,而深度学习框架则是这场技术革命中的关键工具。在众多深度学习框架里,PyTorch 以其独特的魅力和强大的功能,迅速崛起并占据了重要的地位,吸引着无数开发者和研究者…

分布式光纤传感(DAS)技术应用解析:从原理到落地场景

近年来&#xff0c;分布式光纤传感&#xff08;Distributed Acoustic Sensing&#xff0c;DAS&#xff09;技术正悄然改变着众多传统行业的感知方式。它将普通的通信光缆转化为一个长距离、连续分布的“听觉传感器”&#xff0c;对振动、声音等信号实现高精度、高灵敏度的监测。…

Spring事务回滚在系统中的应用

以文章发布为例&#xff0c;介绍Spring事务回滚在系统中的应用 事务回滚的核心概念 事务回滚是数据库管理系统中的关键机制&#xff0c;它确保数据库操作要么全部成功&#xff0c;要么全部失败。在Spring框架中&#xff0c;我们可以通过Transactional注解轻松实现事务管理。 …

ASP.NET Core使用Quartz部署到IIS资源自动被回收解决方案

iis自动回收的原因 回收机制默认配置&#xff0c;间隔时间是1740分钟&#xff0c;意思是&#xff1a;默认情况下每1740分钟(29小时)回收一次&#xff0c;定期检查应用程序池中的工作进程&#xff0c;并终止那些已经存在很长时间或已经使用了太多资源的工作进程 进程模型默认配…

调用.net DLL让CANoe自动识别串口号

1.前言 CANoe9.0用CAPL控制数控电源_canoe读取程控电源电流值-CSDN博客 之前做CAPL通过串口控制数控电源&#xff0c;存在一个缺点&#xff1a;更换电脑需要改串口号 CSDN上有类似的博客&#xff0c;不过要收费&#xff0c;本文根据VID和PID来自动获取串口号&#xff0c;代码…

算法(蓝桥杯学习C/C++版)

up: 溶金落梧桐 溶金落梧桐的个人空间-溶金落梧桐个人主页-哔哩哔哩视频 蓝桥杯三十天冲刺系列 BV18eQkY3EtP 网站&#xff1a; OI Wiki OI Wiki - OI Wiki 注意 比赛时&#xff0c;devc勾选c11&#xff08;必看&#xff09; 必须勾选c11一共有两个方法&#xff0c;任用…

Docker镜像无法拉取问题解决办法

最近再学习RabbitMQ&#xff0c;需要从Docker镜像中拉取rabbitMQ&#xff0c;但是下拉失败 总的来说就是无法和docker镜像远程仓库建立连接 我又去尝试ping docker.io发现根本没有反应&#xff0c;还是无法连接找了许多办法还是没有办法解决&#xff0c;最后才发现是镜像问题&a…

ZephyrOS 嵌入式开发Black Pill V1.2之Debug调试器

版本和环境信息如下&#xff1a; PC平台&#xff1a; Windows 11 专业版 Zephyr开发环境&#xff1a;v4.1.0 Windows 下搭建 Zephyr 开发环境 WeAct BlackPill V1.2开发板&#xff1a; WeAct STM32F411CEU6 BlackPill 核心板 Debug调试器&#xff1a; ST-LINK V2: ST-LINK V2 S…

服务器磁盘空间被Docker容器日志占满处理方法

事发场景&#xff1a; 原本正常的服务停止运行了&#xff0c;查看时MQTT服务链接失败&#xff0c;查看对应的容器服务发现是EMQX镜像停止运行了&#xff0c;重启也是也报错无法正常运行&#xff0c;报错如下图&#xff1a; 报错日志中连续出现两个"no space left on devi…

c++学习-this指针

1.基本概念 非静态成员函数都会默认传递this指针&#xff08;静态成员函数属于类本身&#xff0c;不属于某个实例对象&#xff09;&#xff0c;方便访问对象对类成员变量和 成员函数。 2.基本使用 编译器实际处理类成员函数&#xff0c;this是第一个隐藏的参数&#xff0c;类…

交易所系统攻坚:高并发撮合引擎与合规化金融架构设计

交易所系统攻坚&#xff1a;高并发撮合引擎与合规化金融架构设计 ——2025年数字资产交易平台的性能与合规双轮驱动 一、高并发撮合引擎&#xff1a;从微秒级延迟到百万TPS 核心架构设计 订单簿优化&#xff1a;数据结构创新&#xff1a;基于红黑树与链表混合存储&#xff0c…

OpenCV计算机视觉实战(10)——形态学操作详解

OpenCV计算机视觉实战&#xff08;10&#xff09;——形态学操作详解 0. 前言1. 腐蚀与膨胀1.1 为什么要做腐蚀与膨胀1.2 OpenCV 实现 2. 开运算与闭运算2.1 开运算与闭运算原理2.2 OpenCV 实现 3. 形态学梯度与骨架提取3.1 形态学梯度3.2 骨架提取 小结系列链接 0. 前言 形态…

[论文阅读] 人工智能 | 利用负信号蒸馏:用REDI框架提升LLM推理能力

【论文速读】利用负信号蒸馏&#xff1a;用REDI框架提升LLM推理能力 论文信息 arXiv:2505.24850 cs.LG cs.AI cs.CL Harnessing Negative Signals: Reinforcement Distillation from Teacher Data for LLM Reasoning Authors: Shuyao Xu, Cheng Peng, Jiangxuan Long, Weidi…