想快速判断 Linux 系统中的 Swap 是否在使用?free -h 可以直接查看 swap 总量、已用和剩余空间,swapon --show 更适合核对具体 swap 设备的启用状态、类型与使用率。除此之外,/proc/swaps 提供的是最底层、最原始的 swap 数据来源。但如果你真正想判断 Swap 是否处于“高频工作”状态,关键还得结合 vmstat 1 输出中的 si/so 指标来分析。

用 free 命令查看虚拟内存(swap)总量和已用情况
在排查 Linux 内存占用问题时,free 往往是最先使用的基础命令,因为它可以同时展示物理内存和虚拟内存 Swap 的整体情况。不过要注意一个细节:默认输出单位是 KiB,数值较长时不够直观。因此建议始终搭配 -h 参数使用,让结果自动转换为更易读的单位,方便快速判断当前 swap 使用量。
- 执行
free -h后,重点查看Swap行中的total、used、free三列数据 - 如果
used接近total,通常说明 swap 占用较高,系统可能正在承受较大的内存压力 - 注意:
free中显示的a vailable表示物理内存的预估可用值,并不包含 swap,它与 swap 使用量没有直接对应关系
用 swapon --show 查看已启用的 swap 设备和使用率
相比 free,这个命令只专注于 swap 信息,输出更清晰,还能进一步查看 swap 的类型(文件或分区)以及优先级,非常适合做精细化检查:
swapon --show=NAME,TYPE,SIZE,USED,PRIORITY可以自定义显示字段,减少无关信息干扰- 如果命令没有任何输出,表示当前系统没有启用 swap,这并不是报错,而是说明 swap 未配置或已被关闭
- 无论是 swap 文件(如
/swapfile)还是 swap 分区(如/dev/sda2)都可以使用,不过在云服务器和容器场景中,swap 文件通常更常见
从 /proc/swaps 读取最原始的 swap 状态信息
这是 Linux 内核直接暴露出来的原始数据接口,很多工具包括 swapon --show 和 free 都是基于它来获取信息。它特别适合脚本读取,或者在数据结果不一致时用于进一步排查:
- 执行
cat /proc/swaps,每一行都代表一个已激活的 swap 区域,字段依次为:文件路径、类型、大小(KB)、已用(KB)、优先级 - 如果某个 swap 区域在
used列中显示为0,但free命令中的 swap 已用值不为 0,通常说明系统存在多个 swap 区域,需要合并统计后再判断 - 这个文件只会显示“当前已启用”的 swap;没有启用的 swap 文件或 swap 分区不会出现在结果里
重点关注 vmstat 中的 si/so —— 它们更能反映 swap 是否活跃
free 和 swapon 只能告诉你 swap “占用了多少”,却无法判断系统是否正在频繁进行换页操作。要评估 swap 是否真的影响性能,就需要看页交换速率:
- 运行
vmstat 1,观察每秒更新的si(swap-in,KB/s)和so(swap-out,KB/s)两列 - 如果
si或so持续不为 0,例如长期大于 100 KB/s,通常意味着进程正在频繁换入换出内存。即使 swap 的used只占总量的 20%,也可能已经带来明显卡顿或性能下降 - 需要注意:
si/so显示的是瞬时速率,而不是累计值;执行vmstat 1 5时共输出 5 行数据,其中首行通常是自开机以来的平均值,分析时应忽略
si/so 是否长期活跃,以及 free -h 中 a vailable 反映的物理内存可用空间是否长期低于几百 MB。很多时候,这才是 Linux 系统频繁使用虚拟内存、触发 swap 的根本原因。