温馨提示×

centos swapper内存不足原因

小樊
45
2026-09-15 07:18:04
栏目: 智能运维

在 CentOS(以及其它 Linux 发行版)中,swapper / 交换空间(swap)内存不足通常不是“swapper 本身出问题”,而是系统物理内存 + 交换空间都被用光,导致内核的 swapper(kswapd / 页面回收机制)无法腾出内存。下面从原因、表现和排查思路来说明。


一、什么是 CentOS 中的 swapper

  • swapper 是内核中负责内存页换入/换出的机制
  • 物理内存不足 时,系统会把不常用的内存页写入 swap 分区/文件
  • 如果 swap 也满了,就会出现“swapper 内存不足”

二、常见原因

1️⃣ 物理内存不足 + Swap 太小

  • 服务器内存小(如 2G/4G)
  • 未配置或配置了过小的 swap
  • 运行了内存占用高的服务(Java、MySQL、Elasticsearch 等)

✅ 表现:

free -h
# swap 使用率 100%

2️⃣ 内存泄漏(应用层)

  • 程序未释放内存
  • 尤其是 Java / PHP / Python 长驻进程

✅ 排查:

top
# 看 RES 列持续增长

3️⃣ Swappiness 设置不合理

  • vm.swappiness 过高 → 过早使用 swap
  • 过低 → 物理内存耗尽才 swap,容易 OOM

查看:

cat /proc/sys/vm/swappiness

一般建议:

  • 数据库服务器:10–30
  • 普通应用:30–60

4️⃣ 没有 Swap 或 Swap 被禁用

swapon --show

如果没有输出,说明没有启用 swap。


5️⃣ OOM Killer 触发前的征兆

内核日志中常见:

Out of memory: Kill process
swapper: page allocation failure

查看:

dmesg | grep -i "oom\|swap\|memory"
journalctl -k | grep -i memory

6️⃣ 大文件 / 缓存占用(少见)

  • tmpfs 使用过多
  • /dev/shm 被写爆
df -h | grep shm

三、如何确认是 swap 不足还是内存不足

free -m
  • Mem 满 + Swap 满 → 真内存不足
  • Mem 有空闲但 Swap 满 → swappiness 或历史占用

四、解决方案(按优先级)

✅ 1. 增加 Swap(最快)

dd if=/dev/zero of=/swapfile bs=1M count=4096
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

写入 /etc/fstab

/swapfile swap swap defaults 0 0

✅ 2. 优化 swappiness

sysctl -w vm.swappiness=30

永久:

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

✅ 3. 限制应用内存

  • Java:-Xmx
  • MySQL:innodb_buffer_pool_size
  • Docker:--memory

✅ 4. 升级物理内存(根本解决)


五、总结一句话

CentOS swapper 内存不足的本质是:物理内存 + swap 容量不足以支撑当前负载。

如果你愿意,可以贴出:

  • free -h
  • top / htop
  • dmesg | tail

我可以帮你精确判断是 内存不够、swap 不够,还是程序泄漏

0