温馨提示×

CentOS Swap如何进行优化设置

小樊
38
2025-11-23 17:55:08
栏目: 智能运维

CentOS Swap优化设置指南

一 容量规划与选择

  • 容量建议(按物理内存与场景)

    • RAM < 4GB:Swap ≈ 2× RAM(为稳定性预留更多缓冲)
    • 4GB ≤ RAM ≤ 8GB:Swap ≈ 1× RAM
    • 8GB < RAM ≤ 64GB:Swap 固定 8GB(避免过大比例导致磁盘抖动)
    • RAM > 64GB:Swap 固定 16GB 或更小(大内存下以“保底”为主)
    • 若主要为内存密集型服务且允许 OOM 风险,可仅保留少量 Swap甚至不配;但建议至少保留少量以作为内存压力的缓冲与内核安全网。以上为通用基线,需结合实际负载与磁盘性能验证调整。
  • 类型选择

    • Swap 分区:性能稳定、布局清晰,适合长期固定容量场景。
    • Swap 文件:部署灵活、扩容便捷,适合云盘/容量变化频繁场景。
    • zram/zswap(内核压缩内存/缓存):在内存内完成压缩,显著降低磁盘 Swap 访问,适合内存紧张SSD环境作为第一层“快缓存”。

二 创建与启用 Swap

  • 创建并启用 Swap 文件(示例 16GB)
    1. 创建文件并设置安全权限
      sudo dd if=/dev/zero of=/swapfile bs=1G count=16
      sudo chmod 600 /swapfile
      
    2. 格式化为 Swap 并启用
      sudo mkswap /swapfile
      sudo swapon /swapfile
      
    3. 开机自动挂载(写入 /etc/fstab)
      /swapfile  swap  swap  defaults  0 0
      
  • 创建并启用 Swap 分区(示例 /dev/sdb1)
    1. 分区(fdisk/parted)后格式化
      sudo mkswap /dev/sdb1
      
    2. 启用
      sudo swapon /dev/sdb1
      
    3. 开机自动挂载(/etc/fstab)
      /dev/sdb1  swap  swap  defaults  0 0
      
  • 验证
    free -h
    swapon --show
    cat /proc/swaps
    

以上步骤适用于 CentOS 7/8/Stream 等常见版本。

三 关键内核参数与优先级

  • 调整 swappiness(控制内核换出倾向,取值 0–100
    • 查看:
      cat /proc/sys/vm/swappiness
      
    • 临时设置(示例 10,更偏向使用物理内存):
      sudo sysctl vm.swappiness=10
      
    • 永久设置(/etc/sysctl.conf):
      echo "vm.swappiness = 10" | sudo tee -a /etc/sysctl.conf
      sudo sysctl -p
      
    • 经验值:桌面/交互负载可更低(如 10–30);纯后台/批处理可更高(如 40–60),以实测为准。
  • 使用 zram/zswap(减少磁盘 IO)
    • 启用 zram(示例创建 2GB zram 设备,具体以发行版工具为准):
      sudo modprobe zram
      echo lz4 > /sys/block/zram0/comp_algorithm
      echo 2G > /sys/block/zram0/disksize
      sudo mkswap /dev/zram0
      sudo swapon /dev/zram0 -p 32767   # 提高优先级,优先使用 zram
      
    • zswap 为内核内置功能,通常通过内核参数启用并与 Swap 设备协同工作,适合在SSD上减少实际落盘 Swap 次数。
  • 多 Swap 优先级
    • 在 /etc/fstab 中为更快设备(如 SSDzram)设置更高的优先级(pri= 值越大优先级越高):
      /dev/zram0  swap  swap  defaults,pri=32767  0 0
      /swapfile   swap  swap  defaults,pri=10       0 0
      

以上参数与方法可显著降低磁盘抖动并提升内存紧张场景的稳定性。

四 监控与常见优化动作

  • 监控命令
    free -h                 # 内存与 Swap 使用概览
    cat /proc/meminfo        # 细粒度内存指标(如 SwapTotal/SwapFree)
    vmstat 1 10             # 观察 si/so(换入/换出)是否持续不为 0
    top/htop                # 实时进程与内存占用
    iostat -x 1             # 磁盘 IO 压力(swap 落盘时关注 await、svctm)
    
  • 优化动作清单
    • 持续出现 si/so > 0 且 iowait 升高:优先扩容物理内存;无法扩容时,适度提高 swappiness 并增加 SSD/NVMe 上的 Swap 优先级,或启用 zram/zswap 作为第一层缓冲。
    • 多个 Swap 分区/文件可并行分担 IO,但应优先保证更快设备的高优先级,避免慢盘拖累整体。
    • 应用侧优化:调整 JVM/数据库缓存、减少常驻内存对象、启用内存压缩/对象池等,降低对 Swap 的依赖。
    • 变更前务必在测试环境验证,变更中保持对业务峰值的观察,变更后保留回滚方案。

0