温馨提示×

Swap空间满了对系统有何影响

小樊
31
2025-12-06 06:37:28
栏目: 云计算

影响概述

  • Swap 空间耗尽物理内存(RAM) 也紧张时,系统无法再将“冷”页面换出,内存回收受阻,容易出现 频繁页面错误(page fault)抖动(thrashing),表现为整体性能显著下降、交互与响应明显变慢。若此时仍有新内存分配请求,可能触发 OOM Killer(Out‑Of‑Memory Killer) 终止进程以自保。极端情况下会出现 系统卡死、无法登录或访问服务 等稳定性问题。

典型症状

  • 负载不高但系统很慢:CPU 利用率不高而 iowait 升高,磁盘持续繁忙,说明在大量换入/换出。
  • 应用响应迟缓或超时:数据库查询、网页请求、SSH 登录等出现明显延迟甚至失败。
  • 新进程难以启动或被杀:内存分配失败,可能伴随 “Out of memory” 日志,关键服务被 OOM Killer 终止。
  • 监控告警:Swap 使用率长期接近或达到 100%

成因与风险

  • 成因:
    • 物理内存不足(业务峰值、配置偏小)。
    • 内存泄漏大量后台进程 长期占用内存。
    • swappiness 值偏高,导致系统过早、过多使用 Swap。
  • 风险:
    • 性能劣化到不可用,用户体验与业务 SLA 受影响。
    • 稳定性下降,关键进程被 OOM Killer 终止,甚至 宕机

快速处置与排查

  • 快速缓解:
    • 终止或限流内存占用高的进程,释放 RAM,让系统有机会把部分页面从 Swap 换回。
    • 临时降低 swappiness(如设为 10),减少进一步换出:echo 10 > /proc/sys/vm/swappiness(持久化写入 /etc/sysctl.conf 并执行 sysctl -p)。
    • 扩容 Swap(示例新增 2GB 文件):
      sudo fallocate -l 2G /swapfile
      sudo chmod 600 /swapfile
      sudo mkswap /swapfile
      sudo swapon /swapfile
      echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab
      
    • 谨慎清理页面缓存(仅在确认安全时):echo 3 > /proc/sys/vm/drop_caches,随后恢复为 0
  • 排查定位:
    • 查看整体使用:free -hswapon -stop/htop
    • 找出占用 Swap 的进程:
      for i in $(ls /proc | grep -E '^[0-9]+$'); do
        awk '/Swap:/{a+=$2} END{print i, a/1024 "M"}' /proc/$i/smaps 2>/dev/null
      done | sort -k2nr | head
      
    • 结合监控确认是否出现 iowait 升高、Swap 持续 100% 等现象。

长期优化建议

  • 优先 增加物理内存,从根本上降低对 Swap 的依赖。
  • 合理设置 swappiness(如 10–30),在保留应急缓冲的同时减少不必要的换出。
  • 规划合适的 Swap 大小与布局:有观点认为 Swap 可设为 内存的约 2 倍,但在内存充足的服务器上可更小;也可配置 多个 Swap 区/文件 分散 I/O 压力。
  • 优化应用与配置:关闭不必要服务、修复内存泄漏、控制并发与缓存策略,避免业务在高峰期逼近内存上限。

0