什么是 Swap

在 Linux 系统中,SWAP(交换空间) 是物理内存的补充区域。当服务器物理内存资源紧张时,系统会把内存中不活跃的数据转移到磁盘 Swap 空间,释放物理内存给正在运行的活跃进程使用。

Swap 并不是真正增加物理内存,它依托磁盘读写,速度远低于内存。它的定位是应急缓冲,而不是解决内存不足的特效药,不能依靠 Swap 来根治程序 OOM 崩溃问题。

Swap 分为两种实现方式:swap 交换分区、swap 文件,云服务器大多使用 swap 文件部署,操作更灵活。

一、查看当前 SWAP 状态

登录服务器 SSH 终端,执行下面命令查看内存与 Swap 整体情况:

bash

free -h

输出会展示物理内存总大小、已用、空闲,以及 Swap 总大小、已使用、剩余容量。

查看 swap 详细来源(区分是 swap 文件还是磁盘分区):

bash

swapon --show
  • 如果输出为空:代表当前服务器没有开启 Swap;

  • 如果看到/swapfile:代表使用 swap 文件;

  • 如果显示磁盘设备名:代表使用独立 swap 分区。

二、Swap 大小怎么设置

不同业务场景建议:

  1. 内存 ≤4G 小型服务器:Swap 大小建议等同于物理内存;

  2. 8G‑16G 通用业务服务器:推荐配置 2G‑4G Swap,用于内存瞬间冲高兜底;

  3. 32G 以上大内存服务器:配置 2‑4G Swap 即可,仅作为应急防护;

  4. SSD 云服务器适合开启 Swap;机械硬盘环境不建议配置过大 Swap,会产生大量 IO,严重拖慢整机性能。

swappiness 参数:控制系统使用 Swap 的倾向,取值范围 0‑100。

  • 推荐生产环境设置 vm.swappiness = 10,优先使用物理内存,仅在内存压力较高的时候使用交换空间,减少磁盘读写对业务性能的影响。

  • 数值越高,系统会越积极使用 swap,数据库类业务不建议使用高数值。

注意:Swap 无法修复程序本身内存溢出问题。当应用存在内存泄漏,Swap 只会延缓进程被系统杀死,想要彻底解决问题,需要优化应用程序本身。

三、创建 Swap 文件完整步骤

1、一键脚本(以 4G swapfile 为例,直接复制整条执行)

bash

fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
sysctl -w vm.swappiness=10
echo "vm.swappiness=10" >> /etc/sysctl.conf

逐条解释:

  1. fallocate -l 4G /swapfile:创建 4G 大小 swap 文件;

  2. chmod 600 /swapfile:设置权限,禁止普通用户读取;

  3. mkswap /swapfile:格式化为 swap 格式;

  4. swapon /swapfile:启用 swap;

  5. 写入/etc/fstab实现开机自动加载;

  6. 设置 swappiness 参数,并且写入配置永久生效。

2、验证是否生效

bash

free -h

可以看到 Swap 一栏出现对应容量即为部署成功。

四、常用管理命令

临时关闭全部 Swap(重启会复原)

bash

swapoff -a

重新启用 Swap

bash

swapon -a

修改 swappiness 临时生效(重启失效)

bash

sysctl -w vm.swappiness=10

如果使用面板工具,一般在系统设置页面提供 Swap 图形化开关,填写对应 MB 数值即可一键开启,效果等同于命令行。

五、生产环境重要注意事项

  1. Swap 是兜底防护,不要当作扩容内存手段,程序内存泄漏该崩溃还是会崩溃;

  2. 数据库类业务,swappiness 不要设置过高,过高会把数据库缓存刷入磁盘,性能暴跌;

  3. SSD 适合开启 Swap;机械硬盘业务尽量少用 Swap;

  4. 系统重启后 Swap 失效,务必确认写入/etc/fstab保证开机自动挂载;

  5. 日常监控 Swap 使用率,如果长期大量占用 Swap,说明服务器物理内存已经不足,优先考虑升级内存;

  6. 不要把 Swap 放在性能差、IO 负载很高的磁盘上,会造成业务响应延迟