如何在 Linux 下配置 Swap 交换分区防止内存溢出

文章导读
配置 Swap 分区是防止 Linux 实例因物理内存耗尽导致服务崩溃的应急手段,适合应对偶发的内存峰值,但不建议将其作为长期性能优化方案,物理内存不足时优先升级实例规格。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 参考来源
A A

配置 Swap 分区是防止 Linux 实例因物理内存耗尽导致服务崩溃的应急手段,适合应对偶发的内存峰值,但不建议将其作为长期性能优化方案,物理内存不足时优先升级实例规格。

先说结论:Swap 是用磁盘空间换内存稳定性,能防止 OOM 崩溃,但会牺牲磁盘 I/O 性能,适合内存紧张且无法立即升级硬件的场景。

  • 适合:物理内存较小(如 2GB 以下)或偶尔出现内存峰值的云服务器实例。
  • 先准备:确认磁盘剩余空间充足,且非低性能云盘(普通云盘开启 Swap 可能导致 I/O 瓶颈)。
  • 验收:使用 free -m 或 swapon `--show` 命令确认 Swap 状态为活跃且大小符合预期。

命令速用版

若你急需创建一个 2GB 的 Swap 文件并立即生效,可参考以下命令序列。请根据实际磁盘空间调整 count 参数。

# 创建 2GB 交换文件
dd if=/dev/zero of=/swapfile bs=1G count=2
# 设置权限仅 root 可读写
chmod 600 /swapfile
# 格式化为 swap 类型
mkswap /swapfile
# 启用交换空间
swapon /swapfile
# 验证是否生效
free -m

为什么会这样

Linux 系统的物理内存(RAM)是有限的,当运行程序所需内存超过物理上限时,内核会触发 OOM(Out Of Memory)机制杀死进程以保护系统。Swap 分区将部分磁盘空间模拟为内存使用,当物理内存不足时,系统会将不常用的数据临时移到 Swap 中,从而释放物理内存给关键进程。虽然磁盘读写速度远低于内存,会导致系统变慢,但能避免服务直接崩溃,起到“止血”作用。

分步处理

以下是通过文件方式配置 Swap 的标准流程,适用于大多数 Linux 发行版(如 Ubuntu、CentOS、Debian)。

1. 检查当前内存与磁盘情况
先确认当前没有启用 Swap,且磁盘有足够空间。

free -m
df -h

2. 创建交换文件
使用 dd 命令在根目录或数据盘创建文件。大小建议参考:物理内存≤2GB 可设 2 倍,2-8GB 可设 1 倍,超过 16GB 通常不建议配置。

dd if=/dev/zero of=/swapfile bs=1M count=2048

3. 设置安全权限
为防止安全风险,交换文件权限应设置为仅所有者读写。

chmod 600 /swapfile

4. 格式化并启用
将文件标记为交换空间并激活。

mkswap /swapfile
swapon /swapfile

5. 设置开机自动挂载
编辑 /etc/fstab 文件,确保重启后生效。在文件末尾添加以下内容:

如何在 Linux 下配置 Swap 交换分区防止内存溢出
/swapfile none swap sw 0 0

怎么验证是否生效

配置完成后,需确认系统已识别并使用新的交换空间。

1. 查看内存概况
执行 free -m,观察 Swap 行的 total 列是否有数值。

free -m

2. 查看交换分区详情
使用 swapon 命令显示详细信息,确认文件名和大小。

swapon `--show`

3. 检查 fstab 配置
确认 /etc/fstab 中已写入挂载信息,避免重启后失效。

cat /etc/fstab | grep swap

常见坑

配置 Swap 虽简单,但以下场景需谨慎处理,避免引发新问题。

1. 磁盘 I/O 性能下降
普通云盘或机械硬盘的 I/O 性能较低,频繁使用 Swap 会导致系统响应变慢。部分云厂商建议,若实例内存大于 16GB,通常不建议配置 Swap。

2. 权限设置不当
若 Swap 文件权限过于开放(如 644),可能被其他用户读取,存在安全风险。务必执行 chmod 600。

3. 无法替代物理内存
Swap 只是应急方案,若系统长期内存不足,应优先升级实例规格增加物理内存,而非依赖 Swap。

4. fstab 配置错误
若 /etc/fstab 写法错误,可能导致系统无法启动。修改前建议备份该文件,并使用 mount -a 测试语法是否正确。

参考来源

  • 阿里云帮助中心 - 如何配置 Linux 实例的 swap 分区 (https://help.aliyun.com/zh/ecs/support/how-do-i-configure-the-swap-partition-of-a-linux-ins)
  • Linux 系统之 armbain 配置 swap 交换分区教程
  • Linux 怎么设置 swap 交换分区_Linux 创建和配置交换空间教程【进阶】
  • Ubuntu Linux 创建和增加 Swap 分区教程
  • Linux 设置交换分区 (swap) 的方法