磁盘与文件系统51 条

swap 配置与查看

swap 是内存不足时的兜底:swapon/swapoff 启停、mkswap 制作、fstab 持久化;内存吃紧与 OOM 排查必须先看 swap 使用。

Linux 运维命令速查系统更新于 2026-10-13

swap 是什么

swap 是内存不足时的兜底空间:内存压力大时内核把不活跃页换出到交换分区或交换文件,避免直接触发 OOM Killer 杀进程。用 mkswap 制作、swapon 启用、swapoff 停用,并在 fstab 中持久化。排查内存问题必须看 swap:它被大量占用说明物理内存长期紧张,即使 free 输出的 available 看起来还够。vm.swappiness 控制换出倾向,数据库类服务通常建议调低,但要权衡延迟与内存占用。

基本信息

适用平台Linux(util-linux 的 mkswap、swapon、swapoff)
命令语法mkswap 设备或文件 / swapon 路径 / swapoff 路径 / swapon --show
常用选项--show 列出已启用 swap -a 启用 fstab 中的全部 swap -s 概要 -p 设置优先级
相关内核参数vm.swappiness 换出倾向(0-100)、vm.overcommit_memory 内存超额策略
权限说明制作与启停 swap 需要 root

典型使用场景

  • 扩容缓冲:内存吃紧的服务加一块 swap 缓冲,争取排查时间
  • 云主机补配:默认没有 swap 的实例手工创建交换文件
  • 停用评估:服务优化后关闭 swap 前先评估内存余量
  • OOM 排查:结合 free 与 vmstat 判断是否与 swap 不足有关
  • 多盘优先级:为不同性能的 swap 设备设置优先级

创建 4G 交换文件

创建 4G 交换文件
fallocate -l 4G /swapfile      # 或 dd if=/dev/zero of=/swapfile bs=1M count=4096
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab    # 持久化
swapon --show; free -h; cat /proc/swaps            # 查看当前状态
sysctl vm.swappiness                               # 查看换出倾向

查看与判断

信息来源内容判断依据
swapon --show已启用的 swap 设备与容量确认 swap 是否真的挂上,以及总容量
free -h内存与 swap 的使用量swap used 长期偏高说明物理内存紧张
/proc/swaps内核视角的 swap 列表与 fstab 配置交叉验证
vm.swappiness换出倾向参数数据库类服务通常调低,但不宜简单置 0
swap 文件必须 chmod 600。权限过宽时 swapon 会拒绝启用并给出权限相关报错,这是搭 swap 时最常见的失败原因。
swapoff -a 会把已使用的 swap 内容全部拉回内存。内存余量不足时这一步会直接触发 OOM,停用 swap 前必须先确认可用内存足够。
交换文件与交换分区:交换文件随时可增删、扩容方便,适合云主机;交换分区需要提前在分区表里规划,改动成本高。在当前内核上两者的性能差距已经很小。
swap 文件优先用 fallocate 创建,速度快。在 Btrfs 或部分网络文件系统上 fallocate 生成的文件可能带空洞导致 swapon 拒绝启用,此时改用 dd 逐块写入更稳妥。

易错点

  • swapoff -a 时内存余量不足,直接触发 OOM 把业务进程杀掉
  • SSD 上配置过大的 swap 带来写入寿命与性能负担,服务器应优先加内存
  • 新增 swap 后忘记写入 fstab,重启后 swap 消失
  • 把 vm.swappiness 设为 0 以为能完全禁用换出,极端内存压力下仍会换出

数据来源与参考

  • man 8 swapon
  • man 8 mkswap

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌