Linux Swap 大小如何设置

Swap(交换空间)的大小不需要与物理内存严格成比例,应根据系统内存使用情况、业务峰值以及是否需要支持系统休眠来决定,而不是简单采用「Swap = RAM × 2」的固定公式。

1. 服务器 Swap 大小建议

对于普通 Linux 服务器,Swap 主要用于缓解内存压力,可以参考以下配置:

物理内存 RAM 建议 Swap
1GB 1~2GB
2GB 1~2GB
4GB 2~4GB
8GB 2~4GB
16GB 2~4GB
32GB 4~8GB
64GB 以上 4~16GB

以上只是经验参考,实际配置应结合应用的内存峰值、内存增长趋势和磁盘空间决定。

Swap 主要有三个用途:一是将暂时不活跃的内存页换出,释放物理内存;二是为内存突增提供缓冲,降低触发 OOM Killer 的风险;三是为系统休眠保存内存镜像提供存储空间。

需要注意,Swap 不能替代物理内存。频繁发生 Swap In/Out 会导致性能下降,对数据库、Redis 等延迟敏感型服务尤其不利。

2. Swappiness 参数

Linux 提供 vm.swappiness 参数,用于调整内核在匿名内存回收与文件缓存回收之间的倾向。它不是 Swap 使用率阈值。

# 查看当前配置
cat /proc/sys/vm/swappiness

# 临时调整
sudo sysctl vm.swappiness=10

常见参考值:

场景 Swappiness
普通服务器 10~30
数据库服务器 1~10
桌面系统 40~60

具体数值应结合内核版本和业务负载测试,不建议机械套用。

3. 系统休眠对 Swap 的要求

桌面系统可能会需要支持 Hibernate(休眠),Swap 的规划方式就稍有差异。

Linux 休眠时,需要将内存中的运行状态保存为休眠镜像,写入 Swap 分区或支持的 Swap 文件。下次启动时,再通过 initramfs 读取镜像并恢复系统。

因此,休眠所需的 Swap 空间取决于实际休眠镜像大小,而不是简单等于物理内存。空闲页和可丢弃缓存通常不需要完整保存。

可以参考以下初始规划:

RAM 仅运行服务器 支持休眠
4GB 2GB 4~6GB
8GB 2~4GB 8~12GB
16GB 2~4GB 16~24GB
32GB 4~8GB 32~40GB
64GB 4~16GB 64~72GB

休眠配置应以实际镜像大小和内核要求为准,表中数值是偏保守的规划参考。

可以通过以下命令查看内核休眠镜像大小上限:

cat /sys/power/image_size

该值以字节为单位,表示内核期望生成的休眠镜像大小上限,并不代表实际镜像大小。

另外,Swap 容量足够也不意味着一定能够成功休眠,还需要正确配置 resume 设备、Swap 文件的 resume_offset,以及 initramfs 中的恢复参数。

4. 如何监控 Swap 使用情况?

可以使用以下命令检查内存和 Swap:

free -h
swapon --show
vmstat 1

重点关注 vmstat 中的 si 和 so,分别代表 Swap 换入和换出的速率。如果持续出现较大的数值,说明系统可能存在内存压力,需要排查内存泄漏、异常进程或容量不足,而不是单纯扩大 Swap。

总结

Linux Swap 应根据使用场景分别规划:

  • 服务器: 主要用于内存压力缓冲,通常配置 2~8GB 起步,再根据业务负载调整。
  • 桌面和笔记本: 如果需要支持 Hibernate,建议按照接近或超过 RAM 的容量规划,并验证实际休眠镜像能否完整写入。

还需要区分 Hibernate 和 Suspend-to-RAM:前者将内存状态写入磁盘后断电,后者则依靠持续供电保留内存状态,通常不需要额外配置与 RAM 等大的 Swap 空间。

如果你有魔法,你可以看到一个评论框~