温馨提示×

CentOS Swap为何被大量占用

小樊
45
2026-07-19 09:41:29
栏目: 智能运维

CentOS 下 Swap 被大量占用,通常不是“Swap 本身坏了”,而是 内存压力、缓存回收机制或某些进程的内存行为 导致的。下面从 原因排查 → 常见原因 → 解决方案 系统说明。


一、先确认 Swap 的真实使用情况

free -h
swapon -s

重点关注:

  • Swap Used 是否持续增长
  • 是否 内存(Mem)已经明显不足

二、常见原因(按出现频率)

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

物理内存使用接近 100% 时,系统会被迫把内存页换出到 Swap。

检查:

free -h
htop

现象:

  • Mem 使用率高
  • Swap 同步增长
  • 系统变慢、IO 升高

✅ 这是 正常现象,不是 bug


2️⃣ 内存泄露(某个进程吃内存)

某些程序持续申请内存不释放,最终导致 Swap 上涨。

排查:

top
# 或
ps aux --sort=-%mem | head

重点看:

  • RES 占用大的进程
  • Java / Python / MySQL / Elasticsearch 等

3️⃣ 系统缓存未释放(误解)

Linux 会把空闲内存用于 page cache / buffer

free -h

如果看到:

Mem:   total   used   free   buff/cache

buff/cache 高 ≠ 内存不足 系统会在需要时自动回收。


4️⃣ Swappiness 参数过高(非常常见)

swappiness 控制 内存还剩多少时开始用 Swap

查看:

cat /proc/sys/vm/swappiness
  • 默认:30
  • 建议服务器:10 或更低

修改(临时):

sysctl vm.swappiness=10

永久:

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

✅ 在 大内存服务器上可显著减少 Swap 使用


5️⃣ 某个服务被强制限制内存(如 Docker / K8s)

容器内存限制 + 系统 Swap 同时存在:

  • Docker 容器超出内存限制
  • 系统启用 Swap
  • 结果:Swap 暴涨

检查:

docker stats

解决:

  • 限制容器内存
  • 或禁用容器使用 Swap

6️⃣ 占满 Swap 后无法回缩(正常现象)

一旦内存页被换出到 Swap:

  • 即使内存后来空闲,也不会自动换回
  • 只有再次访问才加载

表现:

  • 内存空闲了
  • Swap 仍然被占用

这是 设计行为,不是异常


三、是否需要清理 Swap?

⚠️ 不建议盲目清理 Swap

除非:

  • 内存确实完全足够
  • 系统 IO 异常
  • 性能明显下降

可临时尝试(有风险)

swapoff -a
swapon -a

⚠️ 风险:

  • 如果内存不足,会 直接 OOM / 进程被杀

四、如何判断 Swap 是否是问题?

现象 是否正常
Swap 占 30%,内存充足 ✅ 正常
Swap 占 70%,系统卡 ⚠️ 有问题
Swap 一直增长 ❌ 需排查
Swap 高但性能正常 ✅ 可接受

五、总结(重点)

✅ CentOS Swap 被大量占用,通常不是系统问题,而是:

  • 内存不足
  • swappiness 设置不合理
  • 某些进程内存异常
  • 容器 / 服务限制

核心思路

先看内存,再看进程,再调 swappiness,最后才考虑 Swap 本身


如果你愿意,可以把下面信息发我,我可以帮你精准判断:

  • free -h 输出
  • top 前几行
  • 是物理机还是云服务器 / Docker / K8s

我可以给你 针对性的优化方案

0