温馨提示×

centos swap为何失效

小樊
32
2026-09-08 19:35:21
栏目: 智能运维

在 CentOS 中 swap 失效(不生效 / 不被使用 / 无法启用) 是比较常见的问题,原因通常集中在配置、分区、文件、内核参数或内存策略上。下面按最常见到最隐蔽的原因给你系统梳理。


一、最常见原因汇总

1️⃣ swap 分区/文件未正确启用

现象
free -h 看不到 swap,或 swapon -s 为空。

检查

swapon -s
free -h
lsblk

解决

  • 如果是 swap 分区:
swapon /dev/sdXx
  • 如果是 swap 文件:
swapon /swapfile

并确保 /etc/fstab 有类似:

/dev/sdXx   swap   swap   defaults   0 0
# 或
/swapfile   swap   swap   defaults   0 0

2️⃣ /etc/fstab 配置错误(非常常见)

典型错误

  • UUID 写错
  • 文件系统类型错(写成 ext4)
  • 挂载选项写错

示例(正确)

UUID=xxxx-xxxx   swap   swap   sw   0 0

检查

mount -a

若有报错,fstab 一定有问题。


3️⃣ swap 文件未 mkswap

现象

swapon: /swapfile: read swap header failed

原因
创建了文件但没初始化。

解决

mkswap /swapfile
swapon /swapfile

4️⃣ swap 文件权限不对

swap 文件权限必须是 600

chmod 600 /swapfile
chown root:root /swapfile

5️⃣ 系统内存充足,swap 不被使用(不是失效)

现象: swap 存在但使用为 0。

这是正常现象!

CentOS 默认策略:

  • 内存够 → 不用 swap
  • swappiness 低 → 更晚使用 swap

查看:

cat /proc/sys/vm/swappiness

临时调整:

sysctl vm.swappiness=10

永久:

echo "vm.swappiness=10" >> /etc/sysctl.conf

6️⃣ swappiness 被设为 0

vm.swappiness = 0

表示尽量不用 swap,某些场景几乎等于失效。


7️⃣ 使用了 zRAM(CentOS 8 / Stream 常见)

CentOS 8+ 可能启用了 zRAM 而不是磁盘 swap

zramctl

如果看到 zram0,说明系统用的是压缩内存,不是传统 swap。


8️⃣ SELinux 导致 swap 文件无法使用

现象: swap 文件存在但 swapon 失败。

解决

restorecon -v /swapfile

9️⃣ 系统启用了 nofail 或 swap 被禁用

某些云镜像或定制系统:

systemctl status swap.target

或内核参数:

cat /proc/cmdline | grep noswap

二、快速自我排查清单 ✅

# 1. 是否启用
swapon -s

# 2. 内存与 swap
free -h

# 3. fstab 是否正确
cat /etc/fstab

# 4. swappiness
cat /proc/sys/vm/swappiness

# 5. 是否有 zram
zramctl

# 6. 日志
journalctl -xe | grep -i swap

三、如果你愿意,我可以进一步帮你定位

你可以直接贴出以下信息:

  • CentOS 版本(cat /etc/redhat-release
  • swapon -s
  • free -h
  • /etc/fstab
  • 是物理机 / 虚拟机 / 云服务器

我可以直接告诉你 swap 为什么失效,以及该改哪一行

0