当服务器的物理内存(RAM)耗尽时,操作系统可能会触发 OOM (Out of Memory) 机制强制杀掉进程,甚至导致系统崩溃。Swap(交换空间)是 Linux 系统的一种兜底机制,它利用硬盘空间模拟内存,将暂时不活跃的数据从 RAM 转移到磁盘上,从而为当前运行的任务腾出空间。
对于云服务商提供的 VPS 实例,手动配置 Swap 是预防内存溢出、保障服务稳定性的标准操作。
Swap 的核心逻辑:文件还是分区?
在 Linux 中,可以通过“交换分区(Swap Partition)”或“交换文件(Swap File)”来实现。在现代云基础设施中,交换文件是更优的选择:
- 灵活性高:无需重新调整磁盘分区,随时可以创建、删除或调整大小。
- 性能相近:在 SSD 存储盛行的今天,交换文件与交换分区的性能差异几乎可以忽略不计。
- 兼容性好:适用于绝大多数虚拟化环境,避免了修改底层块设备结构的风险。
第一步:容量规划与现状检查
在动手之前,先评估服务器当前的内存状态。执行以下命令查看系统是否已经开启了 Swap:
sudo swapon --show
如果返回为空,说明当前未启用 Swap。也可以通过 free -h 确认:
total used free shared buff/cache available
Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi
Swap: 0B 0B 0B
推荐的大小设置
关于 Swap 的大小,可以参考以下经验值:
| 物理内存 (RAM) | 推荐 Swap 大小 |
|---|---|
| 小于 2 GB | 2 倍 RAM |
| 2 GB – 8 GB | 1 倍 RAM |
| 8 GB – 64 GB | 至少 4 GB |
| 大于 64 GB | 4 GB 起步,视具体应用需求而定 |
第二步:创建 Swap 文件
确认磁盘剩余空间充足(使用 df -h 检查)后,开始创建交换文件。这里以创建 1GB 的文件为例:
1. 分配空间
推荐使用 fallocate 命令,它能立即分配指定大小的空间:
sudo fallocate -l 1G /swapfile
如果提示 fallocate failed: Operation not supported(常见于 Btrfs 文件系统),请改用 dd:
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
2. 设置权限
Swap 文件存储的是内存中的原始数据,必须严格限制权限,仅允许 root 用户读写。
sudo chmod 600 /swapfile
3. 格式化并启用
将该文件转化为 Swap 格式并激活:
sudo mkswap /swapfile
sudo swapon /swapfile
现在再次运行 free -h,你应该能看到 Swap 行已经有了 1.0Gi 的总容量。
第三步:配置持久化
上述操作在重启后会失效。要让系统在启动时自动挂载 Swap,需要修改 /etc/fstab 文件。
建议先备份原文件:
sudo cp /etc/fstab /etc/fstab.bak
将挂载信息追加到文件末尾:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
第四步:内核参数调优
Swap 的性能表现很大程度上取决于两个内核参数:swappiness 和 vfs_cache_pressure。
1. 调整 Swappiness
swappiness(取值 0-100)决定了内核将数据从 RAM 转移到 Swap 的频率。
- 默认值 60:通常更适合个人桌面系统。
- 推荐值 10:对于服务器,我们希望系统尽可能利用 RAM,只有在必要时才使用较慢的磁盘 Swap。
临时生效:
sudo sysctl vm.swappiness=10
2. 调整 Cache 压力
vfs_cache_pressure 影响内核回收索引节点(inode)和目录项(dentry)缓存的倾向。默认 100 可能会导致频繁的磁盘 I/O,将其调低(如 50)有助于性能提升。
临时生效:
sudo sysctl vm.vfs_cache_pressure=50
3. 永久生效
编辑 /etc/sysctl.conf,在末尾添加以下两行:
vm.swappiness=10
vm.vfs_cache_pressure=50
维护与常见问题
如何调整大小或删除 Swap?
如果需要改变 Swap 大小,必须先关闭它:
sudo swapoff /swapfile- 删除旧文件
sudo rm /swapfile - 重复创建步骤,分配新的大小。
- 记得检查
/etc/fstab中的路径是否一致。
性能监控建议
虽然 Swap 提供了安全感,但它不是 RAM 的真正替代品。如果你的服务器频繁出现大量的 Swap 换入/换出(可通过 vmstat 1 的 si 和 so 列观察),说明内存资源已经成为严重的性能瓶颈。
在这种情况下,与其增加 Swap 大小,不如考虑升级服务器的物理内存,或者优化内存占用过高的应用程序。
关于
关注我获取更多资讯