温馨提示×

debian swap为何占用很高

小樊
41
2026-10-19 15:15:46
栏目: 智能运维

在 Debian 系统中,swap 占用很高通常不是“故障”,而是系统根据内存压力和配置做出的行为。下面从原因 → 排查 → 解决三个层面说明。


一、常见原因

1️⃣ 物理内存不足(最常见)

当 RAM 不够用 时,内核会把不常用的内存页换出到 swap。

表现:

  • free -h 中 Mem 几乎用完
  • Swap 被大量使用

2️⃣ swappiness 设置偏高

swappiness 决定系统“多积极使用 swap”。

  • 默认值:60(偏激进)
  • 服务器建议:10–30
  • 桌面可更低

查看:

cat /proc/sys/vm/swappiness

3️⃣ 某些进程长期占用内存不释放

例如:

  • Java / Python / Node 服务
  • 数据库(MySQL、PostgreSQL)
  • 容器(Docker)

即使内存够,也可能因为碎片化或缓存策略被换出。


4️⃣ 系统长时间运行未重启

  • 缓存、buffer、僵尸内存累积
  • swap 被逐渐占满但没回收

5️⃣ 显式配置了过大 swap

比如:

  • 服务器有 64G 内存但配了 64G swap
  • 某些程序触发 swap 提前使用

二、如何排查是谁在用 swap

1️⃣ 查看整体内存和 swap

free -h

2️⃣ 查看哪些进程用了 swap

for file in /proc/*/status; do
  awk '/^Pid:|^Name:|^VmSwap:/{print}' "$file"
done | paste - - - | sort -k4 -h | tail

或用工具:

apt install smem
smem -s swap -r | head

3️⃣ 查看 swap 使用情况详情

swapon --show

三、如何解决 / 优化

✅ 方法 1:降低 swappiness(推荐)

sysctl vm.swappiness=10

永久生效:

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

✅ 方法 2:释放 swap(前提是有足够内存)

swapoff -a
swapon -a

⚠️ 风险:

  • 如果内存不够,会导致 OOM
  • 仅推荐维护窗口执行

✅ 方法 3:增加物理内存

如果长期 swap > 20% 内存,基本说明:

内存容量不足


✅ 方法 4:限制特定程序内存

例如 Docker:

--memory=2g --memory-swap=2g

✅ 方法 5:减少 swap 大小(可选)

编辑 /etc/fstab,减小 swap 分区或文件。


四、什么时候 swap 高是正常的?

✅ 以下情况不必担心:

  • swap 占用高,但系统响应正常
  • I/O 不高
  • 没有 OOM 日志(dmesg | grep oom)

五、一句话总结

Debian swap 占用高,多半是内存不足或 swappiness 太激进;先查进程,再调参数,必要时加内存。

如果你愿意,可以贴一下:

free -h
swapon --show
cat /proc/sys/vm/swappiness

我可以帮你具体分析。

0 踩