free -h 输出中 swap 行的 total 列即为当前已启用的交换分区总大小,单位自动适配,若全为0则表示未激活任何 swap 设备;持续监控可用 free -h -s 2,而 swapon --show 和 /proc/swaps 可进一步确认启用的 swap 设备及其容量。

free -h 直接看 Swap 行的 total 值
这是最常用也最直观的方式。free -h 输出中 Swap 行的 total 列就是当前系统启用的 Swap 总大小,单位自动适配(M/G),一眼就能确认有没有 swap、有多大。
注意:free 显示的是“已启用”的 swap 大小,不是磁盘上所有可能存在的 swap 文件或分区。如果输出中 Swap 行全为 0,说明当前没有激活任何 swap 设备。
-
free -h是实时快照,不加参数只执行一次;需要持续观察可用free -h -s 2(每 2 秒刷新) - 某些发行版(如 Ubuntu 22.04+)默认用
/swapfile,free能正确识别并计入 total - 若系统启用了
zram或zswap,free也会把这部分压缩内存算进 Swap total,但/proc/swaps可能不显示——这是正常行为,不是数据错误
swapon --show 看每个启用的 swap 设备及其 size
swapon --show 会列出所有当前生效的 swap 区域,包括设备路径、类型(partition 或 file)、SIZE 和 USED。它的 SIZE 字段就是该设备的容量,和 free 的 total 一致(多个设备时是总和)。
这个命令的关键价值在于确认“到底挂了哪些 swap”,尤其当 free 显示有值但你不确定来源时:
- 如果输出为空,说明没启用任何 swap,
free的 Swap 行也应为 0 -
TYPE是file时,NAME列显示的是完整路径(如/swapfile),可直接ls -lh /swapfile验证文件大小 -
PRIO值影响使用顺序:数值越大越优先;多个设备时,free的 total 是它们 size 的总和,但实际使用可能集中在高优先级那个上
cat /proc/swaps 查原始字段,适合脚本解析
cat /proc/swaps 输出是纯文本、无格式的字段对齐数据,每行包含 filename、type、size(单位 KB)、used(单位 KB)、priority。其中 size 就是该 swap 区域的大小,需手动换算成 MB/GB。
它和 swapon --show 内容基本一致,但更底层、更稳定,适合写监控脚本:
-
size是 KB 单位,别误当成 MB;计算 GB 可用awk '{if(NR>1) print $3/1024/1024 "G"}' - 该文件只反映内核当前管理的 swap,不会显示已创建但未
swapon的文件或分区 - 某些容器环境或精简系统中,该文件可能存在但内容为空——说明内核未启用 swap 子系统,此时
swapon会报错 “cannot find device”
lsblk | grep swap 快速定位磁盘上的 swap 分区
如果你怀疑 swap 应该存在但没被启用(比如刚新建了分区还没格式化),lsblk | grep swap 能快速扫出磁盘上标记为 swap 类型的分区,不管它是否已激活。
这个命令不显示 swap 文件,只对 FSTYPE=swap 的块设备有效:
- 输出类似
sda2 8:2 0 2G 0 part swap,其中2G就是分区大小 - 如果没输出,不代表没 swap——可能是用了 swap file,或者分区类型没设对(比如 fdisk 里没用
t→82设置) - 配合
sudo blkid | grep swap可进一步确认分区是否真的被识别为 swap 类型
真正容易被忽略的是:swap 大小 ≠ 实际可用虚拟内存上限。内核允许的换出页受 vm.swappiness、内存压力、页类型(匿名页 vs 文件页)共同约束。哪怕 free -h 显示 Swap total 是 4G,某些场景下内核也可能拒绝换出,导致 OOM 先于 swap 耗尽发生。











