温馨提示×

centos swap满了怎么办

小樊
55
2026-10-02 19:54:09
栏目: 智能运维

在 CentOS 中,swap 使用率满了(swap 被占满)通常说明系统内存不足,或某些进程占用了大量内存后被换出到 swap。下面按「紧急处理 → 查找原因 → 长期解决」来说明。


一、先确认情况(不要盲目操作)

free -h
swapon --show
top

看几个关键点:

  • 物理内存(Mem)是否也快满了
  • swap 使用率是否 100%
  • 哪个进程占用了大量 RES / SWAP

二、紧急缓解办法(临时)

1️⃣ 释放 swap(前提:物理内存足够)

如果 free -h 显示 内存还有空闲,可以手动换回:

swapoff -a
swapon -a

⚠️ 注意:

  • 执行时系统会把 swap 数据搬回内存
  • 内存不足时千万不要执行,会 OOM

2️⃣ 临时增加 swap(推荐)

如果内存真的不够,可以临时加 swap 文件:

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

验证:

swapon --show

重启后失效,仅用于应急


3️⃣ 杀掉异常进程(最直接)

在 top 或 htop 中找:

  • RES 很大
  • SWAP 很大
  • 不重要的服务

例如:

kill -9 PID

三、排查根本原因(很重要)

1️⃣ 查看谁在用 swap

for pid in $(ls /proc | grep '^[0-9]'); do
  awk -v p=$pid '/VmSwap/{print p, $2}' /proc/$pid/status 2>/dev/null
done | sort -k2 -n -r | head

或:

smem -s swap -r | head

2️⃣ 常见原因

  • Java / MySQL / Redis 配置内存过大
  • 内存泄漏
  • 批量任务(备份、导入、ETL)
  • swapiness 设置不合理

四、长期优化建议

1️⃣ 调整 swappiness(减少 swap 使用)

cat /proc/sys/vm/swappiness

临时:

sysctl vm.swappiness=10

永久:

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

2️⃣ 增加物理内存或永久 swap

如果是长期服务:

  • 加内存(最优)
  • 或永久加 swap 分区

3️⃣ 限制服务内存

例如:

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

五、一句话总结

swap 满 ≠ swap 问题,本质是内存不够或配置不合理
应急:加 swap / 杀进程
根本:查进程 + 调参数 + 加内存

如果你愿意,可以把 free -h 和 top 的输出贴出来,我可以帮你具体分析是哪类问题。

0 踩