Linux swap 交换分区详解:内存不够如何扩容、swap 文件创建与调优,低配 VPS 不卡顿


VPS 内存就那么点,跑着 LNMP、数据库、各种服务,内存一满就卡,甚至直接被系统 OOM 杀掉进程。很多低配 VPS(1G、512M)看起来"该卡"——其实可以通过 swap 交换空间 缓解:把一部分磁盘当作临时内存,内存不够时把暂时不用的数据挪过去,让系统不至于因内存耗尽而崩溃。这篇文章教你创建、扩容、调优 swap。

一、什么是 swap

swap 是 Linux 的"交换分区/文件":当物理内存不够时,系统会把一部分占用不活跃的内存数据"换出"到磁盘上的 swap 空间,腾出物理内存给正在运行的程序;需要时再换回。

作用:

  • 防止 OOM:内存耗尽时,系统不是直接崩,而是用 swap 兜底
  • 给低配机器续命:1G 内存也能跑起来多个服务
  • 节省内存成本:临时性压力用 swap 顶住

注意:swap 是磁盘,读写比内存慢得多。它只是"应急",长期靠 swap 是治标不治本,别指望用它替代加内存。

二、先看当前内存和 swap 情况

free -h
#              total        used        free
# Mem:           985M        812M         80M
# Swap:          1.0G         12M        988M

Swap 行显示当前 swap 大小。若没有 Swap 行(或显示 0),说明还没配置。

三、创建 swap 文件(推荐,不损伤分区)

swap 可以用分区,但更灵活的是用"swap 文件"——想多大就多大,不占专门分区。

1. 创建指定大小的文件(这里以 2G 为例):

fallocate -l 2G /swapfile        # Ubuntu/CentOS 7 支持
# 若 fallocate 报错,用 dd:
dd if=/dev/zero of=/swapfile bs=1M count=2048

2. 设置权限(swap 文件含敏感数据,防普通用户读取):

chmod 600 /swapfile

3. 格式化为 swap 并启用:

mkswap /swapfile
swapon /swapfile

4. 设置开机自动挂载:

把下面这行追加到 /etc/fstab:

/swapfile none swap sw 0 0

四、验证 swap 已生效

swapon --show
free -h

swapon --show 能看到 swap 文件被激活,free 的 Swap 行大小相应变大。

临时关闭 swap:

swapoff /swapfile

五、如何调整 swap 大小

先关闭 → 删掉 → 重建:

swapoff /swapfile
rm -f /swapfile                    # 或先写 0 再删
# 重新按"三、"的步骤创建你想要的更大文件,并改 fstab

若只是临时扩大,重复"创建 + mkswap + swapon"即可,但想改固定大小建议统一重建。

六、swap 调优:swappiness

vm.swappiness 控制系统"多愿意用 swap"。默认 60(0-100,越高越倾向用 swap)。低配机器可调低,减少延迟:

# 查看当前值
cat /proc/sys/vm/swappiness
# 临时调整(0-100,越小越少用 swap)
sysctl vm.swappiness=10

永久生效: 在 /etc/sysctl.conf 里加:

vm.swappiness=10

然后 sysctl -p 让它生效。

想更激进地减少 swap 使用、更爱用内存,可设 vm.swappiness=0;桌面机/内存小可设 30-60。服务器一般建议 10。

七、swap 该设多大

经验参考:

  • 2G 内存以下:swap ≈ 物理内存的 1-2 倍
  • 2G-8G:swap ≈ 与物理内存相近
  • >8G:swap 设 8G 左右即可,或按需

如果没实际需求,给 1G VPS 设置 2G swap 是比较稳妥、常用的选择。

八、swap 填满说明什么

free -h 里 Swap 几乎用满,说明内存持续不足。别只加 swap,要:

  • 找出吃内存的进程:top / htop 排序看内存占用
  • 关掉不用的服务/插件
  • 调优 PHP-FPM worker 数(参考本站 PHP 性能优化教程)
  • 长期看还是建议升级内存,swap 只是兜底

九、常见问题

Q1:fallocate 创建的 swap 报错 / 系统不支持?

某些文件系统不支持 fallocate 预留,改用 dd 方式创建(dd if=/dev/zero of=/swapfile bs=1M count=大小)。

Q2:开机后 swap 又没了?

检查 /etc/fstab 那行是否写对、路径是否一致。用 cat /etc/fstab 确认,然后 swapon -a 手动启用测试。

Q3:swap 用了反而更卡?

swap 本身就是慢的,如果长期大量使用说明内存长期不足。调低 swappiness 让它少用 swap,同时想办法腾内存或升级内存。

Q4:磁盘空间够吗?

swap 文件占用磁盘。创建前用 df -h / 确认根分区有足够空间,别把磁盘塞满。

Q5:swap 和 swap 分区冲突?

两者可共存,但一般二选一即可,避免混乱。用 swap 文件就够了。

十、结语

swap 是低配 VPS 的"续命药":内存不够时,用磁盘兜底,避免系统因 OOM 崩溃。核心步骤就四步:建文件 → mkswap → swapon → 写 fstab 开机自启,再配合 swappiness 调优,1G 的机器也能稳稳跑起整套服务。但记住它只是应急手段,真正稳定还是要合理规划内存与优化服务。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

MySQL 慢查询优化教程:开启慢查询日志、EXPLAIN 分析 SQL、索引优化,让数据库不再拖后腿

Docker Compose 详解:一个文件编排多个容器,一键启动整套应用栈

评 论
更换验证码