温馨提示×

Ubuntu Swap设置最佳实践分享

小樊
44
2026-06-30 14:02:21
栏目: 智能运维

Ubuntu 下 Swap(交换空间) 的设置并没有“唯一标准”,但结合多年生产环境和桌面/服务器实践,可以总结出一套相对稳妥、性能与安全兼顾的最佳实践。下面按 场景 → 建议 → 操作命令 的方式说明。


一、是否需要 Swap?

✅ 建议开启 Swap 的情况

  • 物理内存 ≤ 8GB(尤其是 ≤ 4GB)
  • 运行数据库(MySQL / PostgreSQL)
  • 会跑容器、编译、CI/CD
  • 云服务器(避免 OOM 被直接 kill)
  • 桌面环境(防止突发内存占用)

❌ 可以不用 Swap 的情况

  • 内存 ≥ 32GB
  • 负载非常稳定
  • 明确可接受 OOM 失败
  • 高性能低延迟系统(如 HPC)

二、Swap 大小推荐(官方 + 实践经验)

Ubuntu 官方建议(简化版)

内存大小 Swap 建议
≤ 2GB 2 × RAM
2–8GB = RAM
8–64GB 0.5–1 × RAM
> 64GB 4–16GB(或更小)

实战推荐(更实用)

场景 建议
桌面 / 开发机 RAM 的 0.5–1 倍
8GB 云服务器 8GB
16GB 服务器 8–16GB
数据库 至少 4–8GB
休眠(hibernate) ≥ RAM

三、Swap 类型选择:文件 vs 分区

✅ 推荐:Swap File(交换文件)

  • 灵活
  • 可动态调整
  • 现代 Ubuntu 默认方式

❌ 不推荐:Swap 分区(除非:

  • 你明确需要 hibernate
  • 系统安装时已有 swap 分区

四、Ubuntu 最佳实践配置步骤(Swap File)

1️⃣ 创建 Swap 文件(如 8GB)

sudo fallocate -l 8G /swapfile

如果 fallocate 不可用(某些文件系统):

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

2️⃣ 设置权限

sudo chmod 600 /swapfile

3️⃣ 格式化为 Swap

sudo mkswap /swapfile

4️⃣ 启用 Swap

sudo swapon /swapfile

5️⃣ 写入 fstab(开机自动挂载)

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

五、Swappiness 调整(非常重要)

什么是 Swappiness?

  • 控制内核倾向使用 Swap 的程度
  • 范围:0–100
  • 默认 Ubuntu:60

推荐值

场景 swappiness
桌面 10–30
服务器 10
数据库 1–10
低内存 30–60

设置方式

sudo sysctl vm.swappiness=10

永久生效:

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

六、Swap 使用查看与监控

free -h
swapon --show
top
htop
vmstat 1

检查是否有异常 swap 抖动:

sar -W 1

七、Swap 使用的常见误区

❌ 误区 1:Swap = 慢,一定要关

正确理解:
Swap 是保险,不是长期运行区。
没有 Swap ≠ 快,只等于更容易 OOM。

❌ 误区 2:Swap 越大越好

太大:

  • 浪费磁盘
  • swap thrashing(频繁换页)

❌ 误区 3:SSD 不能开 Swap

现代 SSD:

  • 可以
  • 但不要极端滥用
  • 建议 swappiness 调低

八、DB / 服务器环境补充建议

MySQL / PostgreSQL

  • 保留 Swap
  • swappiness 设置 1–10
  • 保证 vm.overcommit_memory 合理

Docker / K8s

  • 控制 container memory
  • 宿主机最好有 swap

九、Swap 清理与调整

关闭 Swap

sudo swapoff /swapfile

调整大小

sudo swapoff /swapfile
sudo fallocate -l 16G /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

十、一句话总结(最佳实践)

Ubuntu Swap 的最佳实践:
给一点 Swap,但别让它真的被用太多;
用 Swap File,调低 swappiness,生产环境保留它。


如果你愿意,我也可以:

  • ✅ 针对 你的内存 & 用途 给出精确 Swap 大小
  • ✅ 帮你检查当前 Ubuntu 的 Swap 是否合理
  • ✅ 给出 数据库 / Docker / 桌面 专属配置方案

0