Ubuntu创建修改 Swap 文件分区的步骤——解决嵌入式开发板编译ROS2程序卡死问题
同步发布在个人笔记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 文件 (推荐)
这种方法不需要重新分区,比较灵活,推荐使用。
-  创建 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 文件
-  设置 Swap 文件权限: 为了安全,需要设置 Swap 文件的权限,只有 root 用户才能读写: sudo chmod 600 /swapfile
-  格式化为 Swap 文件: 将文件格式化为 Swap 文件系统: sudo mkswap /swapfile
-  启用 Swap 文件: 启用 Swap 文件: sudo swapon /swapfile
-  设置开机自动挂载: 为了让 Swap 文件在系统启动时自动挂载,需要编辑 /etc/fstab文件:sudo nano /etc/fstab在文件末尾添加以下行: /swapfile swap swap defaults 0 0保存并关闭文件。 
-  验证 Swap 是否生效: 使用以下命令验证 Swap 是否生效: sudo swapon --show或者: free -h如果看到 /swapfile出现在swapon --show的输出中,或者free -h的输出中 Swap 的大小不为 0,则说明 Swap 文件已经成功启用。
-  调整 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 分区,可以使用以下步骤启用它:
-  查找 Swap 分区: 使用以下命令查找 Swap 分区: sudo blkid查找类型为 “swap” 的分区,例如: /dev/sda2: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="swap"
-  启用 Swap 分区: 使用 swapon命令启用 Swap 分区,将/dev/sda2替换为你的 Swap 分区:sudo swapon /dev/sda2
-  设置开机自动挂载: 确保 /etc/fstab文件中包含 Swap 分区的配置,如果没有,添加以下行:UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx swap swap defaults 0 0将 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx替换为你的 Swap 分区的 UUID。
-  验证 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 数据。
 
                   
                   
                   
                   
                             
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   2865
					2865
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            