温馨提示×

Debian swapper为何不工作

小樊
52
2026-07-13 19:25:28
栏目: 智能运维

Debian 的 swapper(swap 机制)不工作通常不是“完全没这个功能”,而是没有被激活或配置不正确。下面按最常见原因 → 排查步骤 → 解决办法给你一个系统性的排查清单。


一、先确认:swap 是真的“没工作”吗?

1️⃣ 查看当前 swap 状态

swapon --show
free -h

✅ 正常情况应看到类似:

NAME      TYPE      SIZE USED PRIO
/swapfile file        2G   0B   -2

❌ 如果 swapon --show 没有任何输出,说明 swap 未启用


二、最常见原因 & 解决方法


✅ 原因 1:没有 swap 分区 / swap 文件

检查是否存在 swap

lsblk
cat /proc/swaps

如果没有:

创建 swap 文件(推荐)
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
开机自动挂载
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

✅ 原因 2:swap 已存在但未启用

手动启用

sudo swapon -a

检查 fstab

cat /etc/fstab

应有类似:

/swapfile none swap sw 0 0

UUID=xxxx none swap sw 0 0

✅ 原因 3:systemd 禁用了 swap

某些 VPS / 云镜像会禁用 swap。

检查 systemd

systemctl status swap.target

强制启用

sudo systemctl enable swap.target
sudo swapon -a

✅ 原因 4:swappiness = 0(swap 几乎不用)

⚠️ 不等于 swapper 不工作,而是“尽量不用 swap”。

cat /proc/sys/vm/swappiness

临时修改

sudo sysctl vm.swappiness=60

永久修改

echo 'vm.swappiness=60' | sudo tee -a /etc/sysctl.conf

✅ 原因 5:内存充足,swap 本来就不会用

Linux 只在内存压力大时才用 swap

测试是否真的能用:

stress-ng --vm 1 --vm-bytes 90% --timeout 30s

(需安装 stress-ng


✅ 原因 6:swap 文件在 Btrfs / LVM / 加密分区上

Btrfs 注意事项

  • 必须用:
sudo chattr +C /swapfile
  • 不能放在快照子卷

LVM

确认 VG 有空间:

vgs
lvs

✅ 原因 7:内核参数或安全策略限制

检查内核参数

sysctl -a | grep swap

AppArmor / SELinux(少见)

Debian 默认 AppArmor,一般不影响 swap。


三、快速自检命令(复制粘贴)

swapon --show
free -h
cat /proc/swaps
cat /etc/fstab | grep swap
cat /proc/sys/vm/swappiness

四、典型错误示例

/swapfile 权限不是 600
❌ fstab 写错类型(写成 ext4)
❌ 使用 dd 没 sync 就 mkswap
❌ swappiness=0 + 内存大 → 看起来像“没工作”


五、如果你愿意,我可以进一步帮你

你可以直接贴出:

swapon --show
free -h
cat /etc/fstab
lsblk

我可以精确判断你是哪一种情况,而不是泛泛而谈。

0