swap分区是否存在及是否启用需用swapon --show或cat /proc/swaps确认,free -h中Swap total为0表示未启用;swap文件(如/swapfile)比分区更易管理,但权限须为0600;swap使用率高时应结合vmstat查si/so和/proc/[pid]/status定位进程。

swap 分区是否存在、是否启用
先确认系统有没有配置 swap,以及当前是否在用。很多云服务器默认不配 swap,但某些内存紧张场景下它其实是救命的。
- 运行
swapon --show:只显示已启用的 swap 设备(文件或分区),空输出 = 没启用 - 运行
cat /proc/swaps:和上面一致,但格式更原始,适合脚本解析 - 运行
free -h:看Swap行的total值,为 0 就没启用;非 0 但used长期是 0,说明基本没触发过 - 注意:
lsblk或fdisk -l只能看磁盘分区类型(比如82 Linux swap),不能代替swapon --show判断是否启用
swap 文件 vs swap 分区,怎么看区别
现代 Linux 更倾向用 swap 文件(比如 /swapfile),而不是传统 swap 分区。两者功能一样,但管理方式和性能略有差异。
-
swapon --show输出第一列如果是/dev/sda2这类路径,就是 swap 分区;如果是/swapfile或/var/swap,就是 swap 文件 - swap 文件可动态增删、调整大小,分区得靠
fdisk/parted操作,风险高 - swap 文件在 ext4/xfs 上性能接近分区,但若放在 LVM 或加密卷上,可能有额外开销
- 检查文件权限:
ls -l /swapfile应该是-rw-------,否则swapon会拒绝启用(报错:swapon: /swapfile: insecure permissions 0644, 0600 suggested)
swap 使用率突然飙高,怎么快速定位
swap 不是越少越好,但持续 high usage 往往意味着物理内存不够,或者程序异常泄漏。别光看 free,得往下挖。
- 用
top或htop,按Shift + O(大写 O)切换排序字段,选SWAP或MEM%,找吃 swap 最狠的进程 -
cat /proc/[pid]/status | grep VmSwap查单个进程用了多少 KB swap([pid]替换为实际 PID) - 注意:
free的used是累计值,不代表实时压力;真正卡顿往往发生在si/so(swap in/out)持续 >10 MB/s 时,用vmstat 1看这两列 - 某些 Java 应用设了
-XX:+UseG1GC但堆外内存失控,也会疯狂刷 swap,光看 JVM 参数没用
临时禁用 / 启用 swap 的安全操作
禁用前务必确认剩余可用内存足够,否则可能直接 OOM kill 进程。不是所有 swap 都能随便关。
- 禁用全部:
swapoff -a—— 会逐个卸载所有启用中的 swap,失败时停在第一个报错项 - 启用全部:
swapon -a—— 读取/etc/fstab里标记为swap的条目,只启用那些配置了sw或defaults的 - 单独操作某一项:
swapon /swapfile或swapoff /dev/sdb1 - 关键细节:
/etc/fstab中 swap 行的第 4 字段(options)如果写了noauto,swapon -a就会跳过它;想开机自动挂,得去掉或改成defaults
swap 空间本身不难查,难的是判断它是不是真问题。看到 used 不为 0 就去删 swap,结果半夜服务崩掉——这种事见得太多。重点盯 si/so 和具体进程的 VmSwap,比看总量有用得多。










