温馨提示×

centos swap占用高原因

小樊
46
2026-09-05 21:57:24
栏目: 智能运维

在 CentOS(以及其他 Linux 发行版)中,swap 占用高通常不是“swap 本身的问题”,而是内存压力或系统配置/行为导致的现象。下面按“常见原因 → 说明 → 排查/解决思路”为你系统梳理。


一、最常见原因:物理内存不足

现象

  • 可用内存(available)很低
  • swap 被持续使用
  • 系统可能伴随卡顿、IO 升高

原因

  • 业务内存需求 > 物理内存
  • 内存泄漏(如 Java、C/C++ 程序)
  • 突发流量或批处理任务

排查

free -h
top
# 按内存排序
top -> M

解决

  • 增加物理内存
  • 优化程序内存使用
  • 限制进程内存(cgroup / systemd)

二、swappiness 设置偏高(最常见“非故障”原因)

现象

  • 内存还有,但 swap 已使用
  • 系统并不卡

原因

CentOS 默认:

cat /proc/sys/vm/swappiness
# 常见为 30

swappiness 高 → 内核更“积极”使用 swap

解决(按需)

# 临时
sysctl vm.swappiness=10

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

三、内存长期未释放(cache 不回收)

现象

  • buff/cache 很高
  • swap 也在涨

原因

  • 文件缓存占满
  • 某些程序锁定内存
  • 内核回收策略保守

排查

cat /proc/meminfo

关注:

  • Cached
  • Dirty
  • Mlocked

处理

  • 不要盲目 drop cache
  • 优化 IO / 写盘策略

四、程序异常或内存泄漏

典型场景

  • Java 堆外内存
  • 数据库(MySQL / PG)
  • 自研服务

排查

ps aux --sort=-%mem
smem -s swap

解决

  • 重启异常进程
  • 调整 JVM / 数据库参数
  • 增加监控告警

五、swap 一旦使用,很难自动回收

原因

  • Linux 不会主动把 swap 换回内存
  • 只有“需要内存”时才回收

表现

  • 内存空闲后 swap 仍高

处理(谨慎)

# 关闭再开启 swap(会短暂风险)
swapoff -a && swapon -a

⚠ 生产环境需评估内存是否足够


六、系统服务或定时任务导致

常见来源

  • 备份
  • 日志分析
  • 扫描任务
  • yum / dnf

排查

systemctl list-timers
crontab -l

七、swap 分区/文件本身问题

情况

  • swap 文件碎片
  • 早期分配过小,后期频繁换入换出

解决

  • 调整 swap 大小
  • 使用独立分区而非文件

八、虚拟机 / 云环境特性

特点

  • 宿主机内存超卖
  • balloon driver
  • NUMA 不均衡

表现

  • swap 高但性能异常

解决

  • 调整实例规格
  • 绑定 NUMA / CPU

快速判断思路(实用)

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

如果你愿意,可以补充:

  • CentOS 版本(7 / 8 / Stream)
  • free -h 输出
  • 是否数据库 / Java / 容器环境

我可以直接帮你定位是哪一类原因

0