0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux Swap交换空间详解:Android编译内存不足?这样扩充立竿见影

jf_44130326 来源:Linux1024 作者:Linux1024 2025-12-06 08:10 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Linux系统使用过程中,你是否遇到过内存不足的报错?比如编译Android源码时,明明按教程操作,却因物理内存没达到16G要求而编译中断?这正是Swap交换空间不足在搞鬼。今天不仅要带大家搞懂Swap的核心作用,还会结合Android源码编译的实战场景,给出针对性的扩充方案,新手也能轻松上手~

一、什么是Swap?为什么非它不可?

1.通俗理解:内存的备用抽屉

如果把物理内存(RAM)比作电脑桌面”——常用文件随手可及;那Swap交换空间就是抽屉:当桌面堆满文件(物理内存占满),系统会把暂时不用的文件(不活跃进程数据)放进抽屉,腾出桌面给急需的任务。

2.三大核心作用,缺一不可

应急救急:物理内存耗尽时,Swap临时承接数据,避免程序直接OOM(内存溢出)崩溃,比如Android源码编译这类高内存需求场景;

支持休眠:系统休眠时,会把全部内存数据写入Swap,唤醒时再读回内存,没有Swap就无法使用休眠功能;

优化性能:长期运行的服务器中,Swap会缓存不常用进程,让物理内存集中供给活跃程序,提升整体响应速度。

3.实战场景:Android源码编译的内存门槛

Android源码编译是典型的高内存消耗场景——官方推荐物理内存≥16G,若你的Linux主机只有8G/12G物理内存,编译过程中会频繁出现以下报错:

Outof memory: Killed process12345(cc1plus) total-vm:1234567kB, anon-rss:876543kB, file-rss:0kB, shmem-rss:0kB

或直接提示内存不足,编译中断。这时候无需更换硬件,通过扩充Swap物理内存+ Swap”的总可用内存提升到16G以上,就能顺利完成编译。

二、扩充Swap的两种实用方法(附Android编译场景适配)

在操作前,先搞清楚当前Swap状态——这是后续操作的基础。

2.1前提:检查当前Swap状态

打开终端,执行以下命令,查看Swap的大小、是否启用:

# 方法1:简洁查看(h=人性化单位)free -h# 方法2:详细查看Swap设备/文件swapon --show# 方法3:查看Swap使用情况cat/proc/swaps

输出示例(8G物理内存,无Swap时):

      total    used    free   shared buff/cache  availableMem:     7.7Gi   1.2Gi   5.3Gi   245Mi   1.2Gi   6.1GiSwap:      0B     0B     0B # 无Swap空间,编译Android会报错

2.2方法一:文件方式(推荐!Android编译首选)

适合没有空闲磁盘分区的场景,直接创建文件作为Swap,灵活调整大小,完美适配Android编译的临时高内存需求。

步骤1:创建适配Android编译的Swap文件(关键!)

假设你的物理内存是8G,需要创建8G Swap文件(总可用内存达16G,满足编译要求),用fallocate命令快速创建:

# 创建8G的Swap文件(路径/swapfile可自定义,大小根据物理内存调整)sudofallocate -l 8G /swapfile

如果系统提示fallocate:未找到命令,改用dd命令(速度稍慢,但兼容性强):

# bs=1G 每次写入1G,count=8 共写入8次,总计8G(Android编译推荐大小)sudoddif=/dev/zero of=/swapfile bs=1G count=8

注意:若物理内存是12G,创建4G Swap即可(12+4=16G);物理内存6G则创建10G Swap6+10=16G),核心是让物理内存+ Swap”≥16G

步骤2:设置安全权限(避免敏感数据泄露)

Swap文件包含系统和编译过程中的敏感数据,必须设置为仅root可读可写:

sudochmod600 /swapfile
步骤3:格式化Swap文件(系统识别必备)

将创建的文件格式化为Swap格式,让Linux系统能正常使用:

sudomkswap /swapfile

输出提示Setting up swapspace version 1, size = 8 GiB表示成功。

步骤4:启用新Swap文件(立即生效,无需重启)

sudoswapon /swapfile
步骤5:设置开机自动挂载(编译过程不中断)

Android源码编译耗时久(可能数小时),若中途重启,Swap会失效导致编译中断,需编辑/etc/fstab文件实现永久生效:

1.先备份fstab(防止改错导致系统无法启动):

sudocp/etc/fstab /etc/fstab.bak

1.编辑文件:

sudonano /etc/fstab

1.在文件末尾添加一行(复制粘贴即可):

/swapfile swap swap defaults 0 0

1.保存退出(nano编辑器按Ctrl+O回车Ctrl+X)。

步骤6:验证是否满足Android编译要求

再次执行free -h,看到“Mem+Swap”≥16G即达标:

     total    used    free   shared buff/cache  availableMem:     7.7Gi   1.3Gi   5.2Gi   250Mi   1.2Gi   6.0GiSwap:     8.0Gi     0B   8.0Gi # 总可用内存达13.7Gi?不对!

补充说明:available是系统可分配给新进程的内存(含空闲内存+可释放缓存),实际编译时,系统会动态使用物理内存和Swap,只要“Swap +物理内存总量”≥16G,就能避免OOM报错。

2.3方法二:分区方式(适合有空闲磁盘分区,性能更优)

如果你的硬盘有未分配的空闲分区(比如/dev/sda3,大小≥8G),可直接将分区设为Swap,读写速度比文件方式快,适合频繁编译Android源码的场景。

简要步骤:

1.查看空闲分区:sudo fdisk -l(找到标注free的分区,确保大小≥8G,如/dev/sda3);

2.格式化分区为Swapsudo mkswap /dev/sda3

3.启用分区:sudo swapon /dev/sda3

4.永久生效:编辑/etc/fstab,添加/dev/sda3 swap swap defaults 0 0

5.验证:free -h确认Swap大小≥8G,总内存达标。

三、Android编译场景专属注意事项(避坑必看)

1.Swap大小精准匹配

核心原则:物理内存(RAM+ Swap ≥16GAndroid源码编译最低要求);

示例:8G RAM→8G Swap12G RAM→4G Swap16G RAM→无需扩充(若编译时仍卡顿,可加4-8G Swap)。

1.存储介质优先选SSD

Android编译过程中会频繁读写Swap机械硬盘(HDD)速度慢,会导致编译卡顿;SSD的读写速度是HDD的数倍,能大幅提升Swap响应速度,避免编译耗时翻倍。

2.编译时关闭其他高内存进程

扩充Swap后,尽量关闭浏览器、虚拟机等占用内存的程序,让系统把物理内存和Swap集中供给编译进程,进一步减少卡顿和报错概率。

3.如何删除无用Swap

若后续不再编译Android源码,可删除Swap释放磁盘空间:

# 临时关闭Swapsudoswapoff /swapfile(或/dev/sda3)# 永久删除:删除/etc/fstab中的对应行,再删除文件/分区sudorm/swapfile

四、总结

Swap交换空间是Linux系统的内存救星,尤其对于Android源码编译这类高内存需求场景,无需升级硬件,通过文件或分区方式扩充Swap,就能轻松突破内存限制。关键要记住:根据物理内存精准设置Swap大小(总内存≥16G),优先用SSD存储,设置开机自动挂载避免编译中断。

按照本文步骤操作后,再执行Android源码编译命令,就能顺利避开OOM报错,让编译过程一路畅通~ 如果你在操作中遇到问题,欢迎在评论区留言交流!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    4035

    浏览量

    134447
  • Linux
    +关注

    关注

    88

    文章

    11807

    浏览量

    219508
  • 编译
    +关注

    关注

    0

    文章

    696

    浏览量

    35271
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    升级BIOS时提示内存不足怎么办

    升级BIOS时提示内存不足怎么办在升级Award BIOS 时出现提示"Insufficient memory ",我该怎么办?答:该提示的含义是内存不足,主要是640K 常规
    发表于 03-30 14:01

    RAM内存不足错误

    遇到难题一、:RAM内存不足错误:一 、将UC/OS III移植到STM32F103C8T6的遇到内存不足的报错。分析,c8t6系类RAM内存只有20KB。如上图。在代码中将heap_size设置成
    发表于 08-20 08:14

    HFSS软件内存不足的解决方法

    HFSS软件内存不足该如何解决?
    的头像 发表于 07-15 10:15 2.4w次阅读

    虚拟内存不足的原因

    电脑系统是WinXP,最近使用时,没开多少程序,却常常出现虚拟内存不足的系统提示。可能有以下几个原因
    的头像 发表于 03-14 14:25 3856次阅读

    虚拟内存不足怎么解决

    电脑的虚拟内存不足以后,很多功能就无法使用了,且会弹出如下所示的页面。这就说明虚拟内存无法满足我们的使用需求,就需要咱们对电脑的虚拟内存进行重新设置。那么如何设置呢?请看下文。
    的头像 发表于 03-14 14:29 1.4w次阅读

    需要了解Linux swap分区的扩展

    LinuxSwap(即:交换分区),类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘
    发表于 05-15 08:51 1838次阅读
    需要了解<b class='flag-5'>Linux</b> <b class='flag-5'>swap</b>分区的扩展

    嵌入式LinuxSwap交换区剖析

    时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。
    发表于 04-02 14:36 1098次阅读

    植保无人机在农业领域的应用立竿见影 对于农业生产的帮助成效卓著

    无人机出现在人们的视野中也有十几年了,无人机应用也热火朝天在各个行业中应用起来,公安系统,交通系统,监狱系统,环保系统,电力系统,水利系统解决方案层出不穷。然而,经过这些年的发展,植保无人机在农业领域的应用可以说是最见成效,对于农业生产的帮助是立竿见影,成效卓著。
    发表于 12-24 14:10 1708次阅读

    手机内存不足的清理方法

    很多时候当我们拿起手机时,突然提示我们手机内存不足,无法安装应用,部分功能受影响,手机最近频频提醒内存空间不足,随着手机使用时间的延长,手机不可避免的越来越臃肿,手机运行速度也是一卡再卡。怎么办?没关系,又显示
    发表于 05-20 09:49 1.1w次阅读

    电脑和手机的内存不足怎么办

    如果是电脑内存不足,可以通过任务管理器关闭部分应用程序,也可以在控制面板中调整虚拟内存的大小,还可以通过增加内存容量方式解决。如果是手机运行内存不足,可以一键关闭多任务。如果是手机存储
    发表于 05-22 09:41 2478次阅读

    虚拟内存不足的解决办法

    虚拟内存就是当电脑物理内容不够或者防止运行大型软件时出现不够,在系统盘,比如C盘中划出一个区域,用来存储交换数据,类似物理内存的功能,所以就叫虚拟内存。当出现虚拟
    发表于 05-27 10:19 3353次阅读
    虚拟<b class='flag-5'>内存不足</b>的解决办法

    电脑内存不足怎么解决win10

    电脑内存大家一定都知道吧,通常我们在用电脑的时候,当我们打开大型的网络游戏和各种应用的软件时,如果我们的电脑本身的内存不足,就会使游戏和大型的软件打开失败或者是终止。而且电脑内存不足会大大降低电脑
    发表于 06-12 10:31 1554次阅读

    RAM内存不足的表现及解决方法

    RAM内存不足的表现及解决方法 一、RAM内存不足的表现 系统运行缓慢 当RAM内存不足时,计算机的响应速度会明显下降,打开程序或文件需要更长的时间。 频繁的页面交换(Page Swa
    的头像 发表于 11-11 09:53 8996次阅读

    虚拟内存不足如何解决 虚拟内存和物理内存的区别

    虚拟内存不足的解决方案 虚拟内存不足是计算机用户经常遇到的问题,尤其是在运行大型软件或多任务处理时。以下是一些解决虚拟内存不足问题的方法: 增加物理内存(RAM) : 这是最直接的解决
    的头像 发表于 12-04 09:14 2878次阅读

    Linux扩充Swap交换空间:解决内存不足的实用指南,这些影响要注意!

    大家在使用 Linux 系统(比如常用的 Ubuntu)时,是不是偶尔会遇到 “内存不足” 的弹窗?比如运行大型编译任务、多开虚拟机、做数据分析,或者把 Linux 当服务器用的时候,
    的头像 发表于 02-09 16:33 501次阅读
    <b class='flag-5'>Linux</b>下<b class='flag-5'>扩充</b><b class='flag-5'>Swap</b><b class='flag-5'>交换</b><b class='flag-5'>空间</b>:解决<b class='flag-5'>内存不足</b>的实用指南,这些影响要注意!