简介:SWAP 是 Linux 系统的虚拟内存机制,是服务器运维核心知识点。本文从定义、核心作用、实操创建、参数调整、删除销毁、LNMP生产环境专属配置、避坑注意事项全方位讲解,所有命令可直接复制执行,适合建站服务器、云主机运维学习与落地,可直接用于博客归档。

Linux SWAP 介绍

一、SWAP 核心定义

Linux SWAP 俗称交换分区/交换文件,本质是磁盘空间模拟物理内存(虚拟内存)。

系统会在物理内存(RAM)资源不足时,将内存中暂时闲置、低优先级的进程数据,转移到磁盘的 SWAP 空间中,释放稀缺的物理内存,供当前活跃程序使用,避免系统因内存溢出直接崩溃、进程被 OOM 机制强制杀死。

SWAP 存在两种实现形式:

  1. Swap 分区:独立磁盘分区,传统服务器方案,读写性能略优,灵活性差,无法随时扩容缩容。
  2. Swap 文件:磁盘上的普通文件,云服务器主流方案,无需分区、灵活可调、运维成本低,LNMP 建站环境首选。
核心区别:物理内存读写速度是磁盘的数百倍,SWAP 仅作为应急兜底机制,不能替代物理内存,频繁使用 SWAP 会导致服务器 IO 飙升、网站卡顿、响应超时。

二、SWAP 核心作用

1. 内存溢出兜底

LNMP 环境下,Nginx、MySQL、PHP-FPM 突发并发会瞬间占用大量内存,SWAP 可临时缓冲内存压力,避免服务器直接宕机、网站502报错。

2. 休眠/挂起支持

Linux 系统休眠功能需要将内存数据全部存入 SWAP,无 SWAP 则无法使用休眠模式。

3. 稳定系统进程

防止系统 OOM Killer 机制误杀核心服务(MySQL、Nginx),保障建站服务持续运行。

4. 闲置内存释放

系统会将长期不访问的后台进程、缓存数据移入 SWAP,腾出物理内存给高频业务进程。


三、SWAP 状态查看(基础实操)

所有操作适配 CentOS、Ubuntu、Debian 全系列系统,可直接复制执行。

# 查看内存、SWAP 整体占用情况
free -h

# 查看详细 SWAP 设备、大小、使用状态
swapon --show

# 查看系统 SWAP 启用倾向参数
cat /proc/sys/vm/swappiness

# 查看缓存回收压力参数
cat /proc/sys/vm/vfs_cache_pressure

四、SWAP 创建实操(Swap 文件方案,推荐)

生产环境、LNMP 服务器优先使用 Swap 文件,无需重装分区、随时扩容,以下以创建 4G SWAP 为例。

1. 创建 SWAP 文件

# 快速创建4G空文件(推荐,速度快)
fallocate -l 4G /swapfile

# 若fallocate报错,使用dd命令兼容所有系统
dd if=/dev/zero of=/swapfile bs=1M count=4096

2. 配置权限(必须步骤)

SWAP 文件权限必须为600,防止恶意用户读取篡改内存数据。

chmod 600 /swapfile

3. 格式化为 SWAP 格式

mkswap /swapfile

4. 启用 SWAP

swapon /swapfile

5. 设置开机自动挂载

编辑 fstab 文件,永久生效,防止重启失效。

vi /etc/fstab

在文件末尾添加一行:

/swapfile none swap sw 0 0

保存退出后,可执行mount -a 校验配置是否无误。


五、SWAP 参数调整(核心优化)

SWAP 优化核心为两个参数:swappiness、vfs\_cache\_pressure,直接影响 LNMP 网站运行流畅度。

1. swappiness(SWAP 使用倾向)

取值范围 0-100,数值越小,系统越不倾向使用 SWAP。

  • 默认60:内存剩余40%时开始使用SWAP,建站环境过于激进
  • 推荐10:仅内存严重不足时启用SWAP,兼顾稳定与性能
  • 0:极致禁止SWAP,仅大内存服务器适用

临时生效(重启失效)

sysctl vm.swappiness=10

永久生效(生产环境必配)

vi /etc/sysctl.conf

添加/修改:

vm.swappiness=10

刷新配置生效:

sysctl -p

2. vfs\_cache\_pressure(缓存回收倾向)

默认100,控制系统回收目录、文件缓存的力度。LNMP环境建议调低,保留网站文件缓存,提升访问速度。

永久配置:

vi /etc/sysctl.conf
vm.vfs_cache_pressure=50

sysctl -p

六、SWAP 删除销毁实操

当服务器内存升级、或 SWAP 占用过高需要重建时,执行删除操作。

1. 临时关闭 SWAP

# 关闭指定swap文件
swapoff /swapfile

# 关闭所有swap
swapoff -a

2. 删除开机挂载配置

编辑 /etc/fstab,删除 /swapfile none swap sw 0 0 这一行。

3. 删除 SWAP 文件

rm -f /swapfile

七、LNMP 建站环境专属配置方案

LNMP 环境核心服务为 Nginx、MySQL、PHP-FPM,对内存、IO 敏感,禁止默认配置,专属优化方案如下:

1. SWAP 大小适配标准

  • 内存 ≤2G:SWAP=2G(小内存服务器必备,防止网站502)
  • 内存 2G-8G:SWAP=内存同等大小(通用建站配置)
  • 内存 8G-64G:SWAP=4G-8G(兜底即可,无需过大)
  • 内存 ≥64G:可关闭SWAP,或保留2G极小兜底

2. 专属参数优化(生产必配)

# /etc/sysctl.conf 完整LNMP优化参数
vm.swappiness=10
vm.vfs_cache_pressure=50
# 优化TCP与内存适配(配套LNMP)
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1

3. 核心优化逻辑

LNMP 网站运行依赖大量文件缓存、数据库缓存,调低 swappiness 可避免频繁置换内存数据,调低缓存回收压力,让系统优先保留网站业务缓存,大幅降低页面加载延迟、502 错误概率。


八、生产环境注意事项(避坑重点)

1. SWAP 不能替代物理内存

网站频繁卡顿、IO 高负载时,优先升级物理内存,而非加大 SWAP。SWAP 仅做应急兜底,无法支撑高并发业务。

2. 机械硬盘(HDD)尽量禁用 SWAP

HDD 读写速度慢、寻道时间长,开启 SWAP 会直接导致服务器卡死、数据库查询超时,SSD 云主机可正常使用。

3. 禁止 SWAP 滥用

若 swapon --show 显示 SWAP 持续高占用,说明内存资源不足,需优化 PHP-FPM、MySQL 内存参数,或升级内存。

4. 特殊文件系统不支持 SWAP

btrfs、zfs 文件系统部分子卷不支持 swapfile,会导致挂载报错,此类环境建议使用独立 swap 分区。

5. 权限严格控制

swapfile 权限必须为600,权限过大会被系统判定不安全,导致 SWAP 挂载失败。

6. 重启校验配置

修改 fstab 后务必执行 mount -a 校验,避免配置错误导致服务器开机失败。


九、总结

1. SWAP 是 Linux 虚拟内存兜底机制,核心作用是防止内存溢出导致服务宕机,不用于提升性能;

2. 云主机 LNMP 环境优先使用 Swap 文件,灵活易维护,适配所有建站场景;

3. 生产环境核心优化:swappiness=10、vfs\_cache\_pressure=50,大幅适配网站业务;

4. 运维核心原则:SWAP 高占用 = 内存不足,优先升级硬件/优化服务,不扩容 SWAP。