绝大多数现代Linux服务器(尤其是云主机)用fallocate创建swap文件就够了,比分区快、安全、易调整;仅I/O延迟极度敏感的数据库或高负载物理服务器才需独立swap分区。

直接说结论:绝大多数现代 Linux 服务器(尤其是云主机)用 fallocate 创建 swap 文件就够了,比分区快、安全、易调整;只有对 I/O 延迟极度敏感的数据库或高负载物理服务器才值得上独立 swap 分区。
用 fallocate 创建 swap 文件(推荐首选)
这是当前最稳妥、最快捷的方式。dd 在 SSD 上可能触发写放大,而 fallocate 是瞬间完成的稀疏文件分配,不实际写零,省时间也省磨损。
- 创建 4GB swap 文件:
sudo fallocate -l 4G /swapfile - 必须设权限,否则
swapon会拒绝启用:sudo chmod 600 /swapfile - 格式化:
sudo mkswap /swapfile(输出里带 UUID,记下来备用) - 启用:
sudo swapon /swapfile - 验证:
swapon --show或free -h看Swap行是否非零
注意:fallocate 在某些老旧文件系统(如 ext2 或某些 NFS)上不支持,此时 fallback 到 dd if=/dev/zero of=/swapfile bs=1M count=4096,但要加 status=progress 看进度。
写进 /etc/fstab 实现开机自动挂载
临时启用的 swap 重启就丢,必须写 fstab。别手敲 UUID,直接用 blkid 复制粘贴,避免空格或大小写错误:
- 查 UUID:
sudo blkid /swapfile→ 输出类似/swapfile: UUID="a1b2c3d4-..." TYPE="swap" - 追加条目(用 UUID 更可靠):
echo 'UUID=a1b2c3d4-... none swap sw 0 0' | sudo tee -a /etc/fstab - 测试配置是否合法:
sudo swapoff -a && sudo swapon -a,没报错再swapon --show确认
别用 /swapfile none swap defaults 0 0 —— defaults 会隐式启用 relatime 等选项,而 swap 不需要这些,sw 才是标准且安全的挂载选项。
swappiness 设多少才合理
这个值控制内核“多想用 swap”,不是“用不用”,而是“多早开始换出”。默认 60 对桌面还行,但对服务器通常是过度激进的。
- 查看当前值:
cat /proc/sys/vm/swappiness - 临时调低(比如设为 10):
sudo sysctl vm.swappiness=10 - 永久生效:
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
重点:值为 0 不等于“禁用 swap”——它只是让内核尽量坚持到 OOM killer 启动前最后一刻才换出;值为 1 会禁用 swap 换出(仅保留紧急换入能力),但极少需要。多数 Web/DB 服务设 10~30 就够了。
swap 分区 vs swap 文件:什么时候必须选分区
swap 文件足够日常使用,但以下情况建议上分区:
- 你有一块 NVMe SSD 专供 swap,且确认该设备支持 TRIM + 队列深度优化
- 运行 PostgreSQL、Oracle 等对内存延迟极其敏感的服务,且监控显示
pgpgin/pgpgout高频抖动 - 系统从裸机安装起就规划好磁盘布局,有未分配空间可直接划
82类型分区
分区操作本身不难(fdisk /dev/sdb → n → t → 82 → w → sudo mkswap /dev/sdb1),但一旦写死就难扩容;而 swap 文件删了重建就行。真正容易被忽略的是:swap 分区无法像文件那样做 chown 或 SELinux 上下文隔离,安全性略低。


















