在 Ubuntu(以及 Linux 通用)系统中,swap 与内存管理策略紧密相关,它们共同决定系统如何使用物理内存、何时把数据换出到磁盘,以及在内存压力下的行为。下面从机制、参数、策略关联和实践建议几个层面说明。
⚠️ Swap ≠ 虚拟内存的全部
Linux 虚拟内存 = RAM + Swap + 文件映射(mmap)
Linux 内存分为两类:
| 类型 | 是否可回收 | 是否可用 Swap |
|---|---|---|
| 文件页(Page Cache) | ✅ | ❌ |
| 匿名页(Anonymous) | ✅ | ✅ |
当内存不足时:
控制 内核使用 Swap 的倾向性
cat /proc/sys/vm/swappiness
| swappiness | 行为 |
|---|---|
| 0 | 尽量避免 swap(除非内存极度紧张) |
| 10–30 | 桌面 / 低延迟系统 |
| 60 | 默认 |
| 100 | 激进使用 swap |
修改方式(临时):
sudo sysctl vm.swappiness=10
持久化:
sudo nano /etc/sysctl.conf
添加:
vm.swappiness=10
✅ 桌面系统建议偏低 ✅ 服务器视负载而定
内存压力来源:
当 Swap 也被耗尽:
dmesg | grep -i oom
| 类型 | 优点 | 缺点 |
|---|---|---|
| Swap 分区 | 性能略好 | 不易调整 |
| Swap 文件 | 灵活 | 性能略低 |
Ubuntu 默认:
创建 Swap 文件示例:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
| 场景 | Swap | swappiness |
|---|---|---|
| 高吞吐 DB | 小或不设 | 1–10 |
| 通用服务 | 0.5×RAM | 10–30 |
| 内存有限 VPS | 1×RAM | 30–60 |
free -h
swapon --show
vmstat 1
Swap 是 Ubuntu 内存管理策略的重要组成部分,但不应成为“常态内存”
合理的 swappiness + 合适的 swap 大小 + 内存监控,才是稳定的关键。
如果你愿意,我可以:
free / vmstat / sar 输出只要告诉我你的系统环境即可。