温馨提示×

CentOS Swap为何一直升高

小樊
52
2026-08-18 09:54:46
栏目: 智能运维

CentOS 中 Swap 使用量一直升高,通常不是“Swap 本身有问题”,而是系统内存压力或配置问题导致的。下面按最常见原因 → 排查方法 → 解决方案给你一个完整分析。


一、Swap 升高的常见原因

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

物理内存(RAM) 不够用 时,系统会把不活跃的内存页换出到 Swap。

典型表现

  • free -hMem 使用率很高
  • Swap 持续增长
  • 系统变慢

✅ 这是正常但危险的信号


2️⃣ 某个进程内存泄漏(Memory Leak)

某些程序(Java、Python、MySQL、Docker 容器等)持续申请内存但不释放。

特征

  • Swap 缓慢或快速上涨
  • 某个进程 RES / %MEM 很高
  • 重启进程后 Swap 下降

3️⃣ Swappiness 设置过高

swappiness 决定系统多积极使用 Swap

  • CentOS 默认:swappiness=30
  • 如果人为改成 60~100,Swap 会提前被使用

4️⃣ 系统长时间运行 + 内存碎片化

即使内存还有剩余,但:

  • 连续内存不足
  • 内核仍可能把部分内存换出

常见于:

  • 运行很久的服务器
  • 大量小进程

5️⃣ 数据库 / 缓存服务配置不合理

如:

  • MySQL innodb_buffer_pool_size 过大
  • Redis 超过物理内存
  • Elasticsearch 堆内存设置错误

6️⃣ 被攻击或异常进程

  • 挖矿程序
  • 恶意脚本
  • 异常 cron 任务

二、如何快速排查(一步一步)

✅ 1. 先看整体内存和 Swap

free -h

重点看:

  • Mem available
  • Swap used

✅ 2. 看是哪个进程在吃内存

top

或更好用:

htop

关注:

  • RES
  • %MEM

✅ 3. 查看内存占用 TOP10

ps aux --sort=-%mem | head -20

✅ 4. 查看 swappiness

cat /proc/sys/vm/swappiness

建议值:

10~30

临时修改:

sysctl vm.swappiness=10

永久修改:

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

✅ 5. 查看是否有内存泄漏

cat /proc/meminfo

重点看:

  • Slab
  • PageTables
  • AnonPages

✅ 6. 查看系统日志

journalctl -xe
dmesg | egrep -i 'oom|kill|mem'

如果有:

Out of memory: Kill process

说明曾经 OOM 过


三、Swap 升高后还能降下来吗?

⚠️ 注意

Swap 升高后不会自动降 除非:

  • 进程退出
  • 手动释放
  • 使用 swapoff + swapon

✅ 手动释放 Swap(推荐做法)

swapoff -a
swapon -a

⚠️ 前提:

  • 物理内存必须足够
  • 否则可能直接 OOM

四、不同场景的解决方案

✅ 场景 1:内存真的不够

✅ 解决:

  • 加内存(最彻底)
  • 拆分服务
  • 限制进程内存(cgroup / docker)

✅ 场景 2:某个程序吃内存

✅ 解决:

  • 重启该进程
  • 调整配置(如 JVM 堆、Redis maxmemory)
  • 升级版本

✅ 场景 3:swappiness 设置不合理

✅ 解决:

  • 调低 swappiness
  • 优先使用物理内存

✅ 场景 4:服务器长期不重启

✅ 解决:

  • 定期维护重启
  • 或手动释放缓存
echo 3 > /proc/sys/vm/drop_caches

五、Swap 是否“有害”?

❌ 不是
适度 Swap 是好事

但:

  • Swap 持续上涨 = 危险
  • Swap 频繁读写 = 性能严重下降

六、我可以帮你进一步分析

你可以直接贴出以下信息,我可以精准判断原因:

free -h
top
cat /proc/sys/vm/swappiness
ps aux --sort=-%mem | head -20

或者告诉我:

  • ✅ 是物理机还是云服务器?
  • ✅ 跑的是什么服务(MySQL / Docker / Java / Redis)?
  • ✅ Swap 是慢慢涨还是突然涨?

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

0