温馨提示×

Ubuntu Swap优化技巧大揭秘

小樊
35
2026-06-30 14:37:30
栏目: 智能运维

Swap 是 Ubuntu(以及所有 Linux)系统在物理内存不足时的“兜底”,但如果配置不合理,它也会成为性能瓶颈。下面从内核参数、swap 大小、使用方式、硬件选择等角度,系统性揭秘 Ubuntu Swap 优化技巧。


一、Swap 到底是干嘛的?

  • 内存不足时:把不常用的内存页换出到磁盘
  • 休眠(hibernate):把内存完整写入 swap
  • 避免 OOM(Out Of Memory):防止进程被直接 kill

⚠️ 注意:Swap ≠ 内存扩展,速度远慢于 RAM


二、Swap 大小建议(2024 实测推荐)

内存大小 推荐 Swap 说明
≤ 2GB 2 × RAM 防止频繁 OOM
2–8GB 1 × RAM 通用桌面
8–16GB 4–8GB 够用
≥ 16GB 2–4GB 除非需要休眠
服务器 1–2GB 防止突发内存峰值

休眠需求 → swap ≥ 内存大小


三、检查当前 Swap 使用情况

swapon --show
free -h
cat /proc/swaps

四、Swap 参数优化(关键)

1️⃣ swappiness(最重要)

cat /proc/sys/vm/swappiness

默认是 60(偏激进)

推荐值

场景 swappiness
桌面 10–30
服务器 1–10
内存充足 1

临时修改

sudo sysctl vm.swappiness=10

永久生效

sudo nano /etc/sysctl.conf

添加:

vm.swappiness=10

2️⃣ vfs_cache_pressure(缓存回收)

cat /proc/sys/vm/vfs_cache_pressure

默认 100,建议:

vm.vfs_cache_pressure=50

✅ 减少 inode/dentry 被过早回收


3️⃣ dirty_ratio / dirty_background_ratio(减少 swap 抖动)

vm.dirty_ratio = 10
vm.dirty_background_ratio = 5

✅ 避免大量写磁盘导致 swap 雪崩


五、Swap 类型选择(性能差异巨大)

✅ 推荐顺序

  1. Swapfile(SSD)
  2. Swap 分区
  3. ❌ zRAM(适合内存极小)
  4. ❌ HDD Swap(性能灾难)

创建高性能 Swapfile(推荐)

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

开机自动挂载:

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

✅ 比分区更灵活、易调整


六、SSD 上的 Swap 优化

1️⃣ 开启 TRIM(重要)

sudo fstrim -v /

确保 fstrim.timer 启用:

sudo systemctl enable fstrim.timer

2️⃣ 避免频繁写入(降低 swappiness 即可)

✅ 现代 SSD 寿命足够,不必过度担心


七、zRAM / zSwap(高级玩法)

zRAM(内存压缩)

适合:

  • 内存 ≤ 4GB
  • 桌面轻量使用
sudo apt install zram-tools

配置:

/etc/default/zramswap

zSwap(后台压缩 + 磁盘)

适合:

  • 服务器
  • 不希望频繁磁盘 IO
echo 1 | sudo tee /sys/module/zswap/parameters/enabled

八、Swap 性能监控

vmstat 1
sar -W 1
iostat -x 1

关注:

  • si / so(swap in/out)
  • 磁盘 IO 延迟

九、常见误区 ❌

❌ Swap 越大越好
❌ 开了 swap 就慢
❌ 服务器完全不配 swap
❌ swappiness=0 一定好

✅ 正确做法:够用 + 合理配置 + 控制写入


十、总结一句话

Swap 优化 = 够用的容量 + 调低 swappiness + SSD + 合理内核参数

如果你愿意,我可以:

  • ✅ 给你 针对你内存大小的定制方案
  • ✅ 对比 Ubuntu 20.04 / 22.04 / 24.04
  • ✅ 帮你排查 swap 导致卡顿的真实原因

只要告诉我:内存大小 + 是桌面还是服务器

0