首页/系统/Linux 内核与性能调优速查/创建并启用 swap 文件
内存与 OOM58 条

创建并启用 swap 文件

在磁盘上创建 swap 文件并启用:fallocate 建文件(或 dd 兜底)→ chmod 600 → mkswap → swapon,写入 fstab 持久化。

swap 文件是什么

在磁盘上创建 swap 文件是最快的扩容换页空间的方式:建立文件(fallocate 优先,dd 兜底)、把权限设为 600、用 mkswap 写入 swap 签名、swapon 启用,最后写进 /etc/fstab 持久化。它适合云主机无法调整分区或临时应急的场景;但能否使用还取决于文件系统是否支持 swap 文件,换出代价也是真实磁盘 IO。

基本信息

适用平台Linux(ext4、xfs 常见支持,部分文件系统有限制)
权限要求文件属主 root、权限 600
关键命令fallocate/dd、chmod、mkswap、swapon、swapon --show
持久化在 /etc/fstab 增加 swap 行
验证swapon --show、cat /proc/swaps
容量建议按内存规模与业务容忍度设定,过大易长期换出拖慢响应

典型使用场景

  • 云主机无法临时扩内存,先加 swap 争取时间避免 OOM 直接杀进程
  • 开发或测试机需要一点缓冲余量,允许短时峰值超过物理内存
  • 为 zram/zswap 之外的方案提供后端交换空间,用于对照实验
  • 迁移或升级前的临时保障,降低操作期间被 OOM 终止的概率
  • 评估应用对换出的敏感度:刻意提供 swap,观察延迟变化

创建与启用

创建与启用
sudo fallocate -l 4G /swapfile || sudo dd if=/dev/zero of=/swapfile bs=1M count=4096  # 建 4G 文件
sudo chmod 600 /swapfile  # 权限必须是 600,否则 swapon 会拒绝
sudo mkswap /swapfile  # 写入 swap 签名
sudo swapon /swapfile  # 立即启用
swapon --show  # 确认已启用、大小与优先级
cat /proc/swaps  # 另一种确认方式,Type 一列为 file
printf '/swapfile none swap sw 0 0\n' | sudo tee -a /etc/fstab  # 持久化,重启后仍生效

步骤与要点

命令作用要点
fallocate快速分配文件空间个别文件系统可能产生空洞,后续 mkswap 报错就改用 dd
dd逐块写零创建文件可靠但慢,注意用 bs/count 组合控制大小
chmod 600设置文件权限权限不符会直接导致 swapon 失败
mkswap写入 swap 签名重复执行前需确认设备未被使用
swapon / swapon --show启用与验证确认已挂载且优先级符合预期
部分文件系统(例如特定特性的 Btrfs 或某些网络/加密存储配置)不支持或不建议使用 swap 文件,创建前应查阅发行版说明。权限或安全模块上下文不正确也会让 swapon 失败,报错要完整读取。
swap 文件落在磁盘上,换出代价是真实 IO。如果目标是用 CPU 换算力以缓解内存压力,zram 或 zswap 这类压缩方案更对症,不必单纯加大磁盘 swap。

易错点

  • 文件权限不是 600:swapon 直接拒绝,错误信息容易被误读为文件系统不支持
  • 在已有数据的文件上创建 swap:mkswap 会覆盖写入签名,务必确认路径是专用文件而非业务数据
  • 只用 fallocate 不验证:产生空洞的文件可能让 mkswap 报错,此时应改用 dd 重建
  • 忘记持久化到 /etc/fstab:重启后 swap 消失,故障在重启后才复现
  • 容量给得过大又不限制 swappiness:系统长期换出,性能缓慢劣化且难以察觉

数据来源与参考

  • util-linux 文档 mkswap(8)/swapon(8)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌