温馨提示×

为什么centos swap满

小樊
40
2026-09-24 01:27:08
栏目: 智能运维

在 CentOS(以及大多数 Linux 系统)中,swap 被用满通常不是“swap 本身的问题”,而是内存压力或系统配置问题的表现。下面按常见原因给你梳理一下:


一、最常见原因

1. 物理内存(RAM)不足

这是最主要原因

  • 系统发现 可用内存不够
  • 内核把不常用的内存页换出到 swap
  • swap 使用量持续上升,最终被占满

判断方法:

free -h
top
htop

看:

  • Memavailable 是否很小
  • Swapused 是否接近 total

2. 某个进程内存泄漏 / 吃内存

某些程序:

  • Java / Tomcat
  • MySQL
  • Docker 容器
  • 自写服务

持续申请内存不释放,最终把内存和 swap 都吃光。

查看谁在用内存:

ps aux --sort=-%mem | head

3. swappiness 设置过高

CentOS 默认:

vm.swappiness = 30

如果被人改成 60~100,系统会过早使用 swap,即使内存还没满。

查看:

cat /proc/sys/vm/swappiness

临时降低:

sysctl vm.swappiness=10

4. swap 分区本身就太小

比如:

  • 只有 1–2 GB swap
  • 内存 8GB / 16GB

一旦内存吃紧,swap 很快满。


5. 系统长时间运行,未重启

  • 缓存、buffer、碎片累积
  • 某些服务慢慢占内存
  • swap 只增不减(除非释放)

二、swap 满了会有什么影响?

  • 系统明显变卡
  • 磁盘 IO 飙升
  • 服务响应慢
  • 严重时:OOM Killer 杀进程

三、如何确认是哪种原因?

1️⃣ 看内存和 swap

free -h

2️⃣ 看谁在用内存

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

3️⃣ 看系统日志

dmesg | grep -i oom
journalctl -xe

四、常见解决方案

✅ 短期解决

# 释放 swap(先确保内存足够)
swapoff -a
swapon -a

✅ 长期解决

  • 加内存(最有效)
  • 扩大 swap
  • 优化/限制进程内存
  • 降低 swappiness
  • 重启问题服务

五、如果你愿意

你可以把下面信息贴出来,我可以帮你精准判断:

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

我可以直接告诉你:是内存不够、配置问题,还是某个服务在搞事

0