free -h 的 Swap 行仅显示总量与已用量,无法反映多设备分布、优先级及实际 I/O 压力;需结合 swapon --show 查各设备类型、大小、使用量和优先级,或读 /proc/swaps 获取精确 KB 级原始数据。

直接看 free -h 的 Swap 行,但别只信这一行——它只告诉你总量和已用,不告诉你 swap 是怎么分布的,容易误判真实压力。
查总体大小和实时使用:用 free -h
这是最快确认“系统有没有 swap、总共多大、现在用了多少”的命令。输出中 Swap 行的 total 就是当前启用的交换空间总和:
-
free -h单位友好(G/M),适合人工快速扫一眼;free -m或free -k适合脚本取整数,避免单位换算误差 - 如果 Swap 行全是
0,说明没启用任何 swap 设备,不是命令坏了,是真没开 - 注意:这个总数是所有已启用 swap 设备之和,但它不区分设备类型(比如
/dev/sda2和/swapfile混在一起加),也不体现优先级
查每个设备的大小、类型和优先级:用 swapon --show
这才是真正能回答“Swap 分区大小是多少”的命令——因为它列出每一个正在干活的 swap 实体:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 输出列包括
NAME(设备路径)、TYPE(partition/file/zram)、SIZE(该设备容量)、USED(当前占用)、PRIO(优先级) -
PRIO很关键:数值越大越先被使用;相同PRIO时内核轮询写入;负值(如-1)表示基本被忽略 - 如果
swapon --show无输出,free -h的 Swap 行必然为 0,两者必须一致;不一致说明有设备挂了但没被swapon认领(比如 zram 驱动异常)
查原始 KB 级精确值和脚本解析:读 /proc/swaps
这个文件是内核吐出的原始数据源,字段严格对齐,没有四舍五入,适合自动化或交叉验证:
- 每行格式:
filename type size(KB) used(KB) priority,全部是整数,无单位干扰 - 计算某个设备使用率必须用:
awk 'NR>1 {printf "%.1f%%\n", ($4/$3)*100}' /proc/swaps,不能手算或靠free的近似值去反推 - 某些发行版(如启用了 zswap 的 Ubuntu 22.04+)可能让
free -h显示 swap 总量,但/proc/swaps里为空——此时唯一可信的是swapon --show
别踩这些坑
Swap 大小不是看单个数字就能下结论的事:
- 多个 swap 设备共存时,
free -h的used接近total,不代表每个设备都快满了——可能只是高优先级的那个撑爆了,其余低优先级的还空着 -
lsblk只显示磁盘分区结构,标为swap类型的分区未必已启用;没出现在swapon --show里的,就等于没在用 - 修改过
/etc/fstab但没执行swapon -a,或者swapoff -a后忘了重开,都会导致free -h显示为 0 - zram 类型的 swap 在
/proc/swaps中可能不出现,但在swapon --show里会明确标出TYPE=zram,这是唯一可靠识别方式
真正容易被忽略的是:Swap 分布不均比总量高更危险——一个设备被打满,I/O 成瓶颈,其他设备却闲着,这时候光看 free -h 完全发现不了问题。

















