温馨提示×

为什么debian swap被占用

小樊
34
2026-10-16 16:55:48
栏目: 智能运维

在 Debian(以及绝大多数 Linux 发行版)中,swap 被占用并不一定代表内存不够用了,常见原因主要有下面几类。


一、最常见原因

1. 系统曾经内存紧张,把部分内存换出到 swap

当物理内存(RAM)不足时,内核会把不常用但又不能释放的内存页写到 swap。

即使后来内存空闲了,这些页默认不会自动换回内存,所以你会看到:

  • 内存空闲很多
  • swap 仍然被占用

这是正常现象,不是故障。

查看示例:

free -h
              total        used        free      shared  buff/cache   available
Mem:           7.7G        2.1G        4.5G       200M        1.1G        5.0G
Swap:          2.0G        800M          1.2G

2. swappiness 设置导致“提前使用 swap”

Debian 默认:

cat /proc/sys/vm/swappiness

一般是 60

含义(简化):

  • 60 = 内存用到约 40% 就开始考虑 swap
  • 值越高 → 越积极使用 swap

如果你内存很大(比如 16G+),但仍看到 swap 被用,多半是这个原因。

可临时降低:

sudo sysctl vm.swappiness=10

永久生效:

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

二、程序或系统行为导致

3. 某些服务“常驻 swap”

例如:

  • 数据库(MySQL / PostgreSQL)
  • Docker 容器
  • 后台守护进程

它们:

  • 启动后占用内存
  • 长时间不活动
  • 被内核判定为“可换出”

结果:

  • swap 长期占用
  • 内存反而显得空闲

4. 系统休眠(hibernate)使用 swap

如果你开启过:

  • hibernate
  • suspend-to-disk

Debian 会把整个内存镜像写入 swap

此时 swap 被大量占用是设计行为。


三、如何判断是否有问题

✅ 正常情况

  • swap 占用但不增长
  • 系统不卡
  • si/so 长期为 0
vmstat 1

关注:

si  so
 0   0

❌ 异常情况(真内存不足)

  • swap 持续增长
  • si/so 频繁不为 0
  • 系统卡顿、响应慢

说明:物理内存真的不够用


四、可选处理方案

1. 不想用 swap(内存充足时)

sudo swapoff -a

或禁用开机挂载(编辑 /etc/fstab)


2. 清空已有 swap(会换回内存)

sudo swapoff -a
sudo swapon -a

⚠️ 前提:内存足够容纳 swap 内容


总结一句话

Debian 中 swap 被占用,大多数情况是“曾经用过、但没换回来”或“swappiness 偏高”,并不一定代表系统出问题。

如果你愿意,可以把下面命令的输出贴出来,我可以帮你具体分析:

free -h
swapon --show
cat /proc/sys/vm/swappiness
vmstat 1 5

0 踩