首页/系统/信创系统运维速查/swap 规划与 swapfile 配置
系统与安装65 条

swap 规划与 swapfile 配置

交换空间按内存与业务定:经验值为内存的 1-2 倍(大内存服务器可减小),也可用 swapfile 增加交换空间;注意磁盘类型与性能取舍。

信创系统运维速查系统更新于 2026-10-13

swap 是干什么用的

swap 是内核在物理内存吃紧时用来临时存放匿名页的磁盘空间,同时承担休眠镜像存储的职责。它的作用不是扩容内存,而是把峰值压力摊到磁盘上,避免瞬时申请失败直接触发 OOM。装机时可以划分交换分区,运行中也能用 swapfile 补,两种方式最终都是挂到内核同一套交换机制上。

基本信息

查看现状free -h、swapon --show、cat /proc/swaps
调整命令mkswap、swapon、swapoff
持久化写入 /etc/fstab,靠 sw 挂载选项识别
容量建议内存 8G 以内给 1-2 倍;大内存服务器按单位规范给 8-16G
推荐位置独立分区或独立磁盘优于同盘 swapfile(后者有碎片与文件系统开销)
权限要求root 或具备 CAP_SYS_ADMIN 的账户

典型使用场景

  • 装机规划阶段决定交换分区大小与落盘位置
  • 运行中发现内存偏紧,用 swapfile 快速补一块交换空间
  • 内核崩溃转储(kdump)需要预留足够交换或转储空间时
  • 调低 swappiness 减少数据库、缓存类服务被换出
  • 交付前核对单位规范里对交换空间的硬性要求

创建并启用 8G swapfile

创建并启用 8G swapfile
fallocate -l 8G /swapfile            # 快速分配,若不支持则改用 dd 创建
chmod 600 /swapfile                  # 权限收紧,避免其他用户读取换出页
mkswap /swapfile                     # 写入交换签名
swapon /swapfile                     # 立即启用
echo '/swapfile none swap sw 0 0' >> /etc/fstab   # 开机自动启用
swapon --show                        # 验证已挂载且大小正确
cat /proc/sys/vm/swappiness          # 查看换出倾向,默认多为 60

dd 兜底与参数调整

dd 兜底与参数调整
dd if=/dev/zero of=/swapfile bs=1M count=8192 status=progress   # 文件系统不支持 fallocate 时用
echo 'vm.swappiness=10' >> /etc/sysctl.d/99-swap.conf          # 降低换出倾向
sysctl -p /etc/sysctl.d/99-swap.conf                           # 立即生效
swapoff /swapfile && swapon /swapfile                          # 改完大小后重建交换

输出逐列读法

输出字段含义正常与异常
free -h 的 Swap 行总量 / 已用 / 空闲已用长期接近总量说明内存不足,需评估扩容
swapon --show 的 SIZE单个交换设备大小与规划值不一致说明文件没建全或没生效
/proc/swaps 的 Typepartition 或 filefile 出现在共享存储上要留意性能与一致性
vm.swappiness换出倾向(0-100)数据库机器常调低;为 0 不等于禁用 swap
swapfile 放在 XFS 或 ext4 上均可;放在 btrfs 上需要先做 nodatacow 处理,否则可能出现交换文件校验失败。
swapoff 会把已换出的页一次性读回内存,余量不足时会长时间卡顿甚至触发 OOM,执行前先看 free 的剩余量。

易错点

  • 用 fallocate 创建的文件在部分文件系统上会被判定为非连续区域,mkswap 直接报错,应改用 dd if=/dev/zero 创建
  • 把 swapfile 放在 LVM 精简卷或快照卷上,内存压力大时可能先写满卷导致 I/O 报错
  • 以为把 swappiness 设为 0 就等于禁用 swap,实际内核仍会在内存极紧张时换出,真正禁用需要 swapoff 并从 fstab 删除
  • 同一份 fstab 条目写了两遍或 UUID 变更后未更新,开机时出现 swap 挂载失败并拖慢启动
  • 在大内存数据库主机上照搬『内存两倍』的老经验,白占数百 GB 磁盘且掩盖了真实内存缺口,应按单位容量规范取值

数据来源与参考

  • Linux 内核 swap 文档
  • openEuler 系统管理指南
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌