在 Debian(以及绝大多数 Linux 发行版)中,swap 占用过高通常不是“内存真不够”的唯一信号,而是由内核内存管理策略、系统负载和历史行为共同决定的。下面按「常见原因 → 排查方法 → 解决建议」来说明。
swappiness 决定系统“多愿意”把内存换出到 swap。
60cat /proc/sys/vm/swappiness
✅ 很多服务器误以为是内存不足,其实是 swappiness 太高
Linux 不会主动把 swap 清回内存,除非:
即使现在内存空闲,swap 仍可能“占着”。
free -h
如果你看到:
这是正常现象,不是故障
例如:
它们占用的内存:
于是 swap 慢慢涨上去。
如果同时存在:
那就是真实内存不足。
Debian 较新版本可能启用:
配置不当也会导致“swap 占用异常”。
free -h
for file in /proc/*/status; do
awk '/^Pid:|^Name:|^VmSwap:/ {print}' "$file"
done | paste - - - | sort -k6 -rn | head
或:
smem -s swap -r | head
cat /proc/sys/vm/swappiness
vmstat 1
关注:
si(swap in)so(swap out)如果长期为 0 → 只是“占着没用”
# 临时
sysctl vm.swappiness=10
# 永久
echo 'vm.swappiness=10' >> /etc/sysctl.conf
sysctl -p
常见值:
sudo swapoff -a
sudo swapon -a
⚠ 注意:
如果是:
应:
swapon --show
确认:
Debian swap 占用高 ≠ 内存不足
多半是:swappiness 偏高 + 历史使用未释放 + 非活跃进程被换出
如果你愿意,可以把下面信息贴出来,我可以帮你精确判断:
free -hswapon --showcat /proc/sys/vm/swappiness