swapon 命令详解
更新时间:2026-09-17。「一个命令一个文档」系列,属于磁盘与存储族。swapon/swapoff 用于启用、查看和关闭 swap(交换空间)——把不活跃内存页换出到磁盘/压缩内存,缓解突发内存压力。
一、查看当前 swap
bash
swapon --show # 设备/文件、类型、大小、已用、优先级(最清晰)
free -h # 顺带看 Swap 行总量/已用
cat /proc/swaps # 原始信息二、用交换文件临时加 swap(云主机无独立分区时)
bash
sudo fallocate -l 2G /swapfile # 或 dd if=/dev/zero of=/swapfile bs=1M count=2048
sudo chmod 600 /swapfile # 权限过宽 swapon 会拒绝
sudo mkswap /swapfile # 格式化为 swap
sudo swapon /swapfile # 启用
# 持久化:写入 /etc/fstab
# /swapfile none swap sw 0 0
sudo swapoff /swapfile # 关闭在部分文件系统(CoW 如 btrfs、稀疏洞)上 fallocate 创建的 swapfile 可能不被接受,传统 ext4/xfs 用
dd写实或用fallocate后按发行版要求处理;chmod 600是硬性要求。容器内通常不允许 swapon(无 CAP_SYS_ADMIN/宿主管理)。
三、多块 swap 与优先级
bash
sudo swapon -p 100 /dev/sdb2 # 高优先级先被使用(0~32767)
swapon --show # PRIO 列查看- 优先级高的先用;相同优先级在旧内核上轮转、新内核可并行(类似 RAID0)。
- 现代还有 zram/zswap:在内存里压缩换出页(zram 是压缩块设备,zswap 是 swap 前置压缩缓存),比换磁盘快得多,常用于内存吃紧的虚机/嵌入式。
四、与 swappiness、OOM 的取舍
bash
cat /proc/sys/vm/swappiness # 0-100,越大越积极换出
sysctl vm.swappiness=10 # 数据库/延迟敏感常调低- swappiness 是"倾向"不是阈值;调低不等于禁用 swap,内存紧张时仍会换。
- swap 不是免费内存:换入换出(major fault、磁盘 I/O)会带来明显延迟尖峰;对延迟敏感服务(数据库、实时交易)常尽量避免依赖 swap,但保留少量 swap 可在突发时换出冷页、降低被 OOM killer 直接杀进程的概率。
- 真正内存不足时即使有 swap 也可能触发 OOM;排查见 OOM FAQ,内存观测用 free/vmstat(si/so 列即换入换出速率)。
相关命令
内存总体用 free/vmstat(si/so 看交换速率),参数用 sysctl 调 swappiness,磁盘用 lsblk/blkid 找设备。
总结
swapon --show 看 swap、swapon 设备/文件 启用、swapoff 关闭:加交换文件走 fallocate/dd→chmod 600→mkswap→swapon 并写 fstab 持久化,多设备用 -p 设优先级;swap 用磁盘/压缩内存(zram)兜住突发内存压力但会带来换页延迟,配合 vm.swappiness 调节倾向,延迟敏感服务少依赖、保留少量可降低直接 OOM 风险,最终仍要靠容量与 OOM 排查根治。