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

财经达人 2026-02-10 32430人围观 中日文化房价开始下跌开源中国原油白银土地市场

大家在使用Linux系统(比如常用的Ubuntu)时,是不是偶尔会遇到内存不足的弹窗?比如运行大型编译任务、多开虚拟机、做数据分析,或者把Linux当服务器用的时候,物理内存一旦告急,系统就会卡顿甚至崩溃。这时候,Swap交换空间就成了救场神器

今天就带大家全面搞懂Swap:它是什么、什么时候需要扩充、扩充后对堆内存和存储速率有啥影响,最后附上一步到位的Ubuntu扩充教程,新手也能跟着做!

wKgZPGkaiwuAb3N7AAAG6CSGfhs839.png

一、先搞懂:Swap交换空间到底是什么?

简单说,Swap就像Linux虚拟内存,和Windows的虚拟内存原理类似——当物理内存(就是你电脑里插的内存条)不够用的时候,系统会把内存中暂时用不上的数据,临时存到硬盘(或SSD)的Swap分区/文件里,腾出物理内存给急需的程序使用。

比如Ubuntu系统默认的Swap大小通常是2G,如果你物理内存是8G,运行一个占10G内存的程序,这时候Swap就会接手剩下的2G,避免程序直接崩溃。

二、这些场景下,一定要扩充Swap

不是所有情况都需要扩充Swap,关键看你的使用场景和系统状态。以下3种情况,建议立刻检查并扩充Swap

1.物理内存不足,频繁触发内存告警

比如物理内存8G,却要运行占12G内存的大型软件(如MatlabDocker容器集群、视频渲染工具);

多任务并发时(比如开着代码编辑器、浏览器、虚拟机、数据库),系统卡顿明显,用free -h命令查看时,可用内存接近0Swap却已经占满。

2.服务器长期高负载运行

如果把Linux当服务器(比如Web服务器、数据库服务器),长期有大量进程在后台运行,即使物理内存暂时够用,也建议扩充Swap——避免突发流量(比如瞬间大量用户访问)导致内存峰值超负载,从而保证服务稳定。

3.低内存设备的续命需求

比如树莓派嵌入式Linux设备(物理内存可能只有2G/4G),运行轻量级服务器或边缘计算任务时,2G默认Swap不够用,扩充后能显著减少内存溢出风险。

三、扩充Swap对堆内存的影响:有帮助但也有

首先得明确:堆内存是程序运行时动态申请的内存空间(比如JavaJVM堆、C++new申请的内存),是程序干活的核心内存区域。Swap和堆内存的关系很紧密,扩充后影响主要有两点:

1.正面影响:避免堆内存溢出崩溃

当程序申请的堆内存超过物理内存上限时,系统会把堆内存中暂时闲置的数据(比如很久没调用的变量、缓存数据)转移到Swap中,释放物理内存给新的堆内存申请。

举个例子:你运行一个Java程序,JVM堆设置为10G,而物理内存只有8G。如果没有Swap,程序会直接报“OOM(内存溢出)错误;有了8G Swap后,系统会把堆中暂时不用的2G数据存到Swap,程序能正常运行。

2.负面影响:堆内存交换频繁会变慢

如果堆内存数据需要频繁在物理内存“Swap”之间切换(行业里叫内存颠簸),程序响应会明显变慢。因为硬盘/ SSD的读写速度,比物理内存慢了几个数量级(物理内存是GB/s级,机械硬盘是MB/s级,即使是SSD也差10倍以上)。

比如你写的程序频繁申请和释放堆内存,且数据量接近物理内存上限,Swap会反复/堆数据,此时你会发现程序卡顿、CPU占用率飙升(因为CPU要等数据交换完成)。

四、对存储速率的影响:别忽视硬盘IO的压力

Swap本质是用硬盘空间当内存,所以它的读写速度完全依赖你的存储设备,同时也会占用存储设备的IO资源,影响其他操作:

1.不同存储介质,影响天差地别

存储类型

Swap读写速度

对系统的影响

机械硬盘(HDD

慢(约50-150MB/s

严重占用硬盘IO,同时做文件拷贝、安装软件会卡顿,甚至系统整体响应变慢

固态硬盘(SSD

较快(约500-2000MB/s

影响比HDD小,但频繁读写Swap会消耗SSD擦写寿命SSD有固定擦写次数)

nvme固态硬盘

很快(约3000-7000MB/s

影响最小,接近物理内存速度,适合作为Swap存储介质

2. Swap使用率过高,整个系统会卡壳

如果Swap使用率超过50%,且持续上升,说明物理内存已经严重不足,系统大部分时间都在搬数据(把物理内存数据写到Swap,再把Swap数据读回物理内存),此时:

打开文件、切换软件要等很久;

命令行输入指令,回车后要延迟几秒才响应;

甚至鼠标光标都会卡顿跳帧

五、实战:Ubuntu下扩充Swap7步详细教程

Ubuntu系统为例,从查看当前Swap”开机自动生效,每一步都有具体命令和示例,新手也能跟着做(其他Linux发行版步骤类似,命令通用)。

前置准备

确保系统有足够的硬盘/ SSD空间(比如要扩到8G,就需要至少8G空闲空间);

sudo权限操作(需要管理员密码)。

步骤1:查看当前Swap大小

先执行free -h命令,查看当前Swap的总大小和使用情况(-h表示人类可读格式,用GB/MB显示,更直观):

free-h

执行后会看到类似输出:

 总计 已用 空闲 共享 缓冲/缓存 可用内存: 19Gi 1.2Gi 5.9Gi 3.0Mi 12Gi 17Gi交换: 2.0Gi 0B 2.0Gi

能看到默认Swap2G,这时候如果要扩到8G,继续下一步。

步骤2:先关闭现有Swap

扩充前必须关闭当前的Swap(避免数据冲突),执行命令:

sudo swapoff -a

输入管理员密码后,再用free -h验证,会发现交换那一行的总计变成0,说明关闭成功:

交换: 0B 0B 0B

步骤3:创建新的Swap文件

dd命令创建一个指定大小的Swap文件(这里以扩到8G为例),命令如下:

sudoddif=/dev/zero of=/swapfile bs=1G count=8

解释一下参数:

if=/dev/zero:从零设备读取数据(用来生成空白文件);

of=/swapfile:把生成的文件保存到根目录,命名为swapfile

bs=1G:每次读写的块大小1G

count=8:读取8次块,总大小= 1G×8=8G(想扩到16G就把count改成16)。

执行后会看到类似输出,说明文件创建成功:

记录了8+0的读入记录了8+0的写出8589934592字节(8.6GB,8.0GiB)已复制,7.04727秒,1.2GB/s

步骤4:设置Swap文件权限(关键!)

为了安全,必须把Swap文件的权限设为600——只有root用户能读写,其他用户没有权限(防止误修改或篡改),命令:

sudochmod600 /swapfile

执行后没有输出,说明权限设置成功。

步骤5:格式化Swap文件

把刚才创建的空白文件格式化为“Swap格式,让系统能识别为交换空间,命令:

sudo mkswap /swapfile

执行后会看到类似输出,包含SwapUUID(不用管UUID,知道成功就行):

正在设置交换空间版本1,大小=8GiB(8589930496 个字节)标签,UUID=C27ae28e-a3ea-47fa-ad81-7f4bc779fa8e

步骤6:启用新的Swap

格式化后,启用这个新的Swap文件,命令:

sudo swapon /swapfile

再用free -h验证,会发现交换的总计变成8G,说明启用成功:

交换: 8.0Gi 0B 8.0Gi

步骤7:配置开机自启(避免重启后失效)

默认情况下,重启系统后新的Swap会失效,所以要把Swap文件添加到/etc/fstab配置文件中,让系统开机自动加载。

1.用文本编辑器打开/etc/fstab

sudo nano /etc/fstab

1.在文件末尾添加一行(复制粘贴即可,注意不要写错):

/swapfile none swap sw 0 0

1.保存退出:按Ctrl+O(字母O),再按回车确认,最后按Ctrl+X退出编辑器。

这样重启系统后,Swap还是8G,不会失效。

六、这些注意事项,新手一定要避开!

1.Swap大小不是越大越好

一般建议Swap大小是物理内存的1-2倍(比如物理内存16GSwap16-32G);但如果是SSD,不建议超过物理内存(避免频繁读写消耗SSD寿命)。

2.Swap文件别放错位置

尽量把Swap文件放在空闲空间充足的分区,优先选SSD(速度快),别放在机械硬盘的系统分区(会拖慢系统)。

3.关闭Swap要谨慎

如果系统正在高负载运行(比如有程序在用Swap),突然执行swapoff -a会导致程序崩溃,建议在系统空闲时操作。

4.定期检查Swap使用情况

htopfree -h定期查看Swap使用率,如果长期超过50%,说明物理内存真的不够用,建议升级内存条(Swap只是应急,不能替代物理内存)。

最后

SwapLinux系统的内存缓冲垫,合理扩充能解决很多内存不足的问题,但也要注意它对堆内存和存储速率的影响——不要过度依赖Swap,升级物理内存才是根本解决方案。

如果觉得这篇教程有用,欢迎分享给身边用Linux的朋友~

不容错过
Powered By Z-BlogPHP