Ubuntu 中 Swap 对稳定性的影响
结论与适用场景
在内存紧张时,合理配置 Swap 能显著降低因内存耗尽触发 OOM Killer 而崩溃的概率,并为系统提供“缓冲”,从而提升稳定性;同时它也是实现**休眠(Hibernate)**的必要条件。但若系统频繁进行 Swap In/Out(俗称“Swap 风暴”),会因磁盘 I/O 较慢导致明显卡顿,这种场景下稳定性提升是以性能下降为代价的。因此,Swap 更偏向于“避免崩溃的兜底机制”,而非提升速度的手段。
如何按场景判断是否开启 Swap
| 场景 |
建议 |
说明 |
| 内存 ≤ 2GB |
开启,大小≈2×RAM |
小内存设备极易耗尽,Swap 能显著降低 OOM 风险 |
| 2GB–8GB |
开启,大小≈1×RAM |
兼顾应急与性能 |
| > 8GB |
开启,大小4–8GB或按需 |
主要用于应急与休眠 |
| > 64GB(服务器) |
可仅1–4GB或禁用 |
依赖监控/OOM 策略;禁用可让异常进程更快重启,减少长时间“半死不活” |
| 需要休眠 |
必须开启,且大小≥RAM |
休眠会把全部内存写入 Swap |
| 高性能/低延迟服务 |
谨慎使用 |
频繁 Swap 会严重影响响应,优先加内存或优化应用 |
| 上述为常见实践范围,需结合负载与磁盘类型(SSD/NVMe 优于 HDD)综合权衡。 |
|
|
配置与优化要点
- 使用 SSD/NVMe 承载 Swap,整体延迟更低;必要时优先使用 Swap 文件(调整灵活)而非固定分区。
- 调整内核倾向:降低 vm.swappiness(如设为10)可减少换出;桌面可保留默认 60。示例:
cat /proc/sys/vm/swappiness
sudo sysctl vm.swappiness=10
- 启用 Zswap(内核 4.0+):先在 GRUB 添加参数 zswap.enabled=1(可选 zswap.compressor=lz4),再 update-grub 并重启;可显著减少实际写入磁盘的页数。
- 监控与排障:用 free -h、swapon --show、cat /proc/swaps、vmstat 1 观察 si/so(Swap In/Out);若长期高占用或频繁换入换出,优先考虑加内存或优化应用内存占用。
快速检查与启用示例
- 查看状态:free -h;swapon --show;cat /proc/swaps;vmstat 1(关注 si/so)。
- 创建并启用 4GB Swap 文件:
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
- 持久化降低换出倾向:echo ‘vm.swappiness=10’ | sudo tee -a /etc/sysctl.conf。