温馨提示×

Ubuntu Swapper如何减少系统崩溃

小樊
41
2025-12-19 23:30:02
栏目: 智能运维

Ubuntu 交换与 Swapper 优化以减少系统崩溃

一 核心思路

  • 目标是避免内存耗尽导致的OOM(Out of Memory)与长时间磁盘抖动:让系统在内存紧张时有足够的交换缓冲,同时尽量把交换对前台体验的影响降到最低。
  • 关键手段:合理设置swappiness、确保足够的交换空间、优化I/O 调度与缓存、并持续监控与告警

二 快速检查与定位

  • 查看交换与内存概况:
    • 命令:free -hswapon --show
  • 观察内存压力与 I/O:
    • 命令:vmstat 1 10iostat -x 1 10top/htop
  • 解读要点:
    • si/so(swap in/out)持续不为 0 且 wa(I/O 等待)偏高,说明系统正频繁换页,存在卡顿甚至崩溃风险。
    • 若可用内存长期接近 0 且交换被大量使用,需尽快扩容内存或优化应用内存占用。

三 关键参数与配置

  • 调整 swappiness(控制内核使用交换的倾向)
    • 查看:cat /proc/sys/vm/swappiness(默认多为 60
    • 临时降低(桌面/交互优先):sudo sysctl vm.swappiness=20
    • 永久生效:在 /etc/sysctl.conf 添加 vm.swappiness=20
    • 说明:值越低越倾向使用物理内存;过低在内存紧张时更易触发 OOM。一般桌面可设 10–20,内存充足或服务器可维持 30–60
  • 调整保留空闲内存(降低低内存触发抖动的概率)
    • 临时:sudo sysctl vm.min_free_kbytes=250000
    • 永久:在 /etc/sysctl.conf 添加 vm.min_free_kbytes=250000
    • 说明:单位为 KB,增大该值可更早触发回收与回写,减少突发 OOM,但会占用更多空闲内存。
  • 配置交换空间大小与优先级
    • 查看:swapon --showfree -h
    • 新增交换文件(示例 4G):
      sudo fallocate -l 4G /swapfile
      sudo chmod 600 /swapfile
      sudo mkswap /swapfile
      sudo swapon /swapfile
      echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
      
    • 多交换源时设置优先级(在 /etc/fstab 中给更快的交换更高 pri):
      • /swapfile none swap sw,pri=100 0 0
      • /dev/sdXN none swap sw,pri=10 0 0
    • 说明:SSD/NVMe 作为交换介质更合适;合理优先级可优先使用更快的交换。

四 场景化建议

  • 桌面与交互优先(减少卡顿)
    • 建议:vm.swappiness=10–20,保留少量交换(如内存的 1–2 倍或至少 2–4GB),使用 SSD 交换,必要时启用 zswap 压缩缓存(内核默认可能已启用)。
  • 服务器与内存紧张
    • 建议:vm.swappiness=30–60,确保交换充足(常见为内存的 1–2 倍),并优先使用 SSD/NVMe;结合监控告警,避免长期高 si/so
  • 低内存设备(如 2–4GB 内存)
    • 建议:至少 2–4GB 交换;适度提高 vm.min_free_kbytes(如 200–300MB 级);精简自启动与后台服务,减少内存占用峰值。

五 监控与维护

  • 日常巡检
    • 命令:free -hswapon --showvmstat 1 10iostat -x 1 10top/htop
    • 关注:si/sowaavailableSwap: 使用率。
  • 变更与回滚
    • 批量变更前先记录基线;修改 /etc/sysctl.conf 后可用 sudo sysctl -p 使配置生效;交换文件变更请先 swapoffswapon,并在 /etc/fstab 正确登记以便开机启用。

0