sycnnj
发布于 2026-01-14 / 44 阅读

Linux 服务器添加 4GB Swap 交换空间指南

这是一份内容详实、结构清晰的运维笔记,补充了 Swap 的原理、演进及适用场景。


在服务器运维中,经常遇到物理内存(RAM)不足导致服务崩溃的情况,特别是运行数据库(MySQL/PostgreSQL)或 Java 应用时。合理配置 Swap(交换空间)是防止系统 OOM(内存溢出)的重要手段。

本文介绍了 Swap 的核心原理、技术演进,并提供了一键式的配置教程。

一、 核心概念与技术演进

1. Swap 的原理

Swap 是 Linux 虚拟内存管理的一部分。当物理内存(RAM)被占满时,操作系统会将内存中暂时不活跃的数据页移动到硬盘上的 Swap 空间中,从而腾出物理内存给当前活跃的进程使用。

  • 简单理解:它是物理内存的“备胎”或“扩容包”。

2. 技术发展

  • 早期(分区时代):早期的 Linux 强制要求在安装系统时划分独立的 Swap 分区。调整大小非常麻烦,往往涉及磁盘重新分区。

  • 现代(文件时代):随着内核的发展,Swap 文件的性能已经与 Swap 分区几乎无异。现在主流方案更推荐使用 Swap 文件,因为它可以随时创建、删除或调整大小,无需改变磁盘结构,灵活性极高。

  • 介质变化:随着 SSD 和 NVMe 的普及,Swap 的读写速度大幅提升,不再像机械硬盘时代那样会导致系统严重卡顿。

3. 优势

  • 防止 OOM Killer:当内存耗尽时,Linux 会触发 OOM Killer 机制强制杀掉高内存占用的进程(通常是数据库)。Swap 提供了一个缓冲,避免服务直接崩溃。

  • 成本优化:对于偶尔出现内存峰值的业务,增加 Swap 比升级物理内存(加钱)更经济。

  • 系统休眠:某些场景下,系统休眠需要将内存数据写入 Swap。

二、 适用环境与系统

  • 适用系统:Debian, Ubuntu, CentOS, Rocky Linux 等主流 Linux 发行版。

  • 推荐场景

    • 小内存 VPS(如 512MB - 2GB 内存),必须配置。

    • 运行 MySQL/Redis 等数据库服务(防止突发流量导致数据库被杀)。

    • 编译大型软件(如编译 GCC 或内核)时。

    • Java 应用(JVM 比较吃内存)。


三、 实操步骤:建立 4GB Swap 文件

以下操作建议在 root 用户下进行。

1. 检查现有 Swap

在操作前,先确认系统当前是否已经有 Swap。

Bash

swapon --show

如果没有任何输出,说明当前没有开启 Swap。

2. 创建 4GB 的 Swap 文件

我们在根目录下创建一个名为 /swapfile 的文件,大小为 4G (4096MB)。

Bash

# 方式 A:使用 fallocate (推荐,速度快)
fallocate -l 4G /swapfile

# 方式 B:如果系统提示不支持 fallocate,请使用 dd 命令 (更通用但稍慢)
# dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress

3. 设置权限 (重要)

为了安全,必须限制只有 root 用户能读写该文件,防止敏感内存数据泄露。

Bash

chmod 600 /swapfile

4. 格式化并激活

将文件格式化为 Swap 格式,并立即启用。

Bash

# 标记为 swap 空间
mkswap /swapfile

# 激活 swap
swapon /swapfile

5. 设置开机自动挂载

默认情况下,重启后手动开启的 Swap 会失效。我们需要修改 /etc/fstab 文件。

Bash

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

四、 性能优化:调整 Swappiness

Swappiness 是一个 0-100 的数值,控制系统使用 Swap 的积极程度:

  • 60 (默认):系统会比较积极地把不常用的数据存入 Swap。

  • 0:只有物理内存完全用光时才用 Swap。

对于服务器环境,我们希望尽可能使用速度极快的物理 RAM,仅在真正紧缺时才用慢速的 Swap。因此建议将值调低至 10

Bash

# 1. 临时生效 (用于测试)
sysctl vm.swappiness=10

# 2. 永久生效 (写入配置文件,重启依然有效)
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.d/99-swap.conf

五、 最终验证

输入以下命令查看内存结构,确保设置成功:

Bash

free -h

预期输出示例:

你应该能在 Swap 这一行看到 Total 接近 4.0Gi。

Plaintext

               total        used        free      shared  buff/cache   available
Mem:           1.9Gi       450Mi       120Mi       1.0Mi       1.3Gi       1.3Gi
Swap:          4.0Gi          0B       4.0Gi