温馨提示×

CentOS Swap内存使用率过高原因

小樊
35
2026-01-02 01:15:16
栏目: 智能运维

CentOS Swap 使用率过高的常见原因

一 内核与策略因素

  • swappiness 设置偏高:该值(范围 0–100)越高越倾向把不活跃的页换出到 Swap。很多发行版默认值并不低(如 CentOS 7 常见为 30,也有资料提到 60),在内存压力不大时也会提前使用 Swap,表现为“可用内存还很多但 Swap 已被使用”。可通过 cat /proc/sys/vm/swappiness 查看,并据负载特征适当降低。调得过低(如 0)并非完全禁用 Swap,内存紧张时仍会使用,且可能增加回收压力与 CPU 占用。
  • 内核回收与缓存策略:Linux 会用空闲内存做 Page Cache/Buffers 提升 I/O 性能。当内存趋紧,内核会回收缓存并可能把不活跃内存页写入 Swap,以确保前台任务有足够内存,这在高 I/O 或内存接近耗尽时更明显。

二 资源与配置因素

  • 物理内存不足或突发峰值:应用实际内存需求超过物理内存时,系统必然依赖 Swap 维持运行,这是最直接的原因。若长期高占用,应优先考虑扩容物理内存或优化应用内存使用。
  • 容器与 cgroup 限制:在 Docker/Kubernetes 等场景,若只为容器设置了内存上限而未限制 Swap,或宿主机整体内存紧张,容器进程可能被换出到宿主机的 Swap;部分环境还会看到 machine.slice、system.slice、user.slice 占用 Swap 的情况。
  • 应用内存泄漏或低效使用:长时间运行的服务(如 Java 应用)若存在泄漏或缓存/堆配置不当,会持续占用更多内存,推动系统更早、更多地使用 Swap。
  • Swap 空间配置不当:Swap 分区/文件过小会更快被占满并影响稳定性;过大则容易掩盖内存瓶颈。常见经验值是:物理内存 ≤2GB2–8GB≈物理内存>8GB≥4GB 且 ≤8GB(实际仍需结合负载与延迟目标调优)。

三 快速自检要点

  • 使用 free -h 观察整体内存与 Swap 使用;用 swapon -s 查看已启用的 Swap 设备/文件与大小。
  • vmstat 1 观察是否有持续的 si/so(swap in/out),持续非零且较大通常意味着正在频繁换页。
  • 定位占用 Swap 的进程:可解析 /proc//smaps 汇总各进程的 Swap 用量,或使用脚本按 Swap 排序找出 Top N 进程,便于针对性处置(重启/限流/优化)。

0