温馨提示×

centos swap异常怎么排查

小樊
40
2026-09-17 22:27:10
栏目: 智能运维

在 CentOS(以及通用 Linux)上,“swap 异常”可能表现为:swap 用满、swap 使用异常高、swap 不停读写(io 高)、swap 无法启用、OOM、性能突然下降等。下面按排查思路 + 常见原因 + 处理方式来说明。


一、先确认 swap 当前状态

1. 查看 swap 使用情况

free -h
swapon -s
cat /proc/swaps

重点关注:

  • 是否启用了 swap
  • swap 使用率
  • 是哪个 swap 设备(分区 / 文件)

2. 查看内存与 swap 关系

top
# 或
htop

看:

  • 物理内存是否真的不足
  • 哪些进程占用了大量内存

二、判断 swap 异常类型

类型 1:swap 使用率突然很高

常见原因:

  • 物理内存不足
  • 某些进程内存泄漏
  • swappiness 设置不合理

排查步骤

ps aux --sort=-%mem | head

找出内存占用最高的进程。

查看 swappiness:

cat /proc/sys/vm/swappiness
  • 默认一般是 30
  • 如果设成 60~100,会更容易用 swap

临时调整:

sysctl vm.swappiness=10

永久生效:

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

类型 2:swap 持续读写,系统卡顿(swap thrashing)

说明:

  • 内存不够,频繁 swap in/out
  • 磁盘 IO 成为瓶颈

排查 IO:

iostat -x 1
vmstat 1

看:

  • si / so(swap in/out)
  • wa(IO 等待)

解决方向:

  • 增加物理内存
  • 限制进程内存(cgroup / systemd)
  • 优化或重启异常进程

类型 3:swap 无法启用 / 丢失

常见于:

  • 重启后 swap 没挂载
  • fstab 配置错误
  • swap 文件损坏

检查:

swapon -a

如果失败,看报错。

查看 fstab:

cat /etc/fstab

示例(swap 分区):

UUID=xxxx none swap sw 0 0

若是 swap 文件:

mkswap /swapfile
swapon /swapfile

类型 4:swap 满但内存还有空闲

可能原因:

  • 曾经内存紧张,swap 没回收
  • swappiness 太高

手动释放(谨慎):

swapoff -a
swapon -a

⚠️ 会先把 swap 内容换回内存,内存不足会 OOM


三、常见根因总结

现象 可能原因
swap 高 内存不足
swap 高但内存够 swappiness 高
系统卡 swap 频繁读写
swap 没了 fstab / 分区问题
进程被杀 OOM + swap 满

四、建议的常规优化

  1. 不要完全禁用 swap(即使内存大)
  2. swappiness 设为 10 左右
  3. 重要服务限制内存
  4. 监控 swap 使用率(node_exporter / zabbix)

如果你能补充具体现象,比如:

  • CentOS 版本(6 / 7 / 8 / Stream)
  • free -h 输出
  • 是 swap 满、还是慢、还是报错

我可以给你更精确的排查命令和处理方案。

0