真正能查Swap分区具体使用分布的命令只有三个:swapon --show、cat /proc/swaps、free -h,分工明确缺一不可;swapon --show显示设备名、类型、大小、已用、优先级;/proc/swaps提供KB级原始数据供脚本解析;free -h反映全局Swap水位但不体现分布。

没有“swap-s”命令,swap-s 是常见拼写错误;真正能查 Swap 分区**具体使用分布**(即每个设备用了多少、优先级如何、类型是否一致)的命令只有三个: swapon --show、cat /proc/swaps、free -h,它们分工明确,缺一不可。
看每个 Swap 设备的实时占用与优先级用 swapon --show
这是唯一同时显示设备名、类型、大小、已用、优先级的命令,适合快速确认“系统挂了几个 swap、谁在干活、谁被冷落”:
-
PRIO列是关键:数值越大越优先使用;负值(如-2)表示低优先级;相同优先级时内核轮询写入 - 输出中
TYPE为partition表示物理分区,file表示交换文件(如/swapfile),zram表示压缩内存块——三者行为差异大,不能混为一谈 - 如果
swapon --show无输出,说明当前没启用任何 swap,free -h的 Swap 行全为 0 是合理的,不是命令失效 - 注意
USED单位默认是人类可读格式(M/G),但数值是近似值;精确 KB 级需转向/proc/swaps
查原始 KB 级数据和脚本解析用 cat /proc/swaps
这个文件是内核直接提供的原始数据源,字段严格对齐:filename、type、size(KB)、used(KB)、priority。它不美化、不估算,适合自动化处理或交叉验证:
-
size和used都是 KB 单位,计算百分比必须用awk 'BEGIN {printf "%.1f", ($4/$3)*100}'这类算术表达式,别手算 - 某些系统(如启用了
zswap或zram的 Ubuntu 22.04+)可能在free -h里计入 swap,但在/proc/swaps中不出现——此时swapon --show才是唯一可信入口 - 若某行
used为 0 但size很大,不代表该设备无效,只是当前没被触发;优先级低或负载轻时就会闲置
判断 Swap 是否告急要看 free -h 的 Swap 行,但别只盯 used
free -h 的 Swap 行(total/used/free)反映的是全局压力水位,但它本身不告诉你分布——必须和前两个命令对照着看:
- 如果
free -h显示Swap: 2.0G 1.9G 100M,但swapon --show只列出一个/dev/sda2,说明所有压力都压在一个设备上,I/O 容易打满 - 如果
free -h的used接近total,但swapon --show显示多个设备且优先级不同,得检查低优先级设备是否配置失败(比如swapoff后没swapon -p恢复) -
free -h不显示优先级,也不区分zram和磁盘 swap,所以当它和swapon --show的总量对不上时,优先信后者
真正容易被忽略的是:Swap 分布不均比总量高更危险。比如两个 swap 设备,一个优先级 5(zram),一个 -1(慢速机械盘),即使总量只用了 60%,但 zram 已满、机械盘才用 5%,内核会立刻开始往慢盘疯狂换出——这时 vmstat 1 的 so 值会突然飙升,而你光看 free 或 swapon --show 的单个数字根本发现不了。


















