Ubuntu 交换空间 Swapper 性能优化指南
一 基线评估与监控
- 查看当前交换与内存:使用命令查看已启用的交换、容量与使用,以及整体内存概况。
- 命令:sudo swapon --show、free -h
- 实时观察内存与进程:定位占用内存与交换较多的进程,判断是否出现异常换页。
- 综合性能与健康:结合系统负载、I/O 与内存压力进行排查。
- 目标:确认是否存在过度换页(swap 活动频繁)、I/O 瓶颈或配置不足,为后续调整提供依据。
二 交换空间大小与位置
- 是否需要休眠:若启用休眠(hibernate),交换空间需至少等于物理内存 + 2GB,用于保存内存镜像。
- 容量建议(服务器常见场景):
- 物理内存≤ 2GB:Swap ≈ 2× RAM
- 2GB < RAM ≤ 8GB:Swap ≈ RAM
- > 8GB:Swap 通常 4–8GB 即可(作为兜底,避免频繁换页拖慢性能)
- 位置优先级:将交换放在SSD/NVMe上以降低延迟;尽量避免使用机械硬盘作为交换介质。
- 形式选择:现代 Ubuntu 默认使用交换文件(灵活易调整),也可使用交换分区(安装时划分)。
三 创建与调整交换文件
- 步骤(以创建 4GB 为例,按需替换大小):
- 创建文件:sudo fallocate -l 4G /swapfile
- 安全权限:sudo chmod 600 /swapfile
- 格式化为交换:sudo mkswap /swapfile
- 启用交换:sudo swapon /swapfile
- 开机自动挂载:在 /etc/fstab 添加一行:/swapfile none swap sw 0 0
- 调整/扩容思路:先禁用旧交换(如:sudo swapoff /swapfile),按上述步骤重建更大文件并启用,最后更新 /etc/fstab。
- 验证:sudo swapon --show 与 free -h 检查是否生效。
四 内核参数与内存压缩优化
- 调整 swappiness(换出倾向):
- 查看:cat /proc/sys/vm/swappiness(默认常见为 60)
- 临时降低换出:sudo sysctl vm.swappiness=10
- 永久生效:在 /etc/sysctl.conf 添加 vm.swappiness=10,执行 sudo sysctl -p
- 经验值:多数服务器建议 10–30;内存充足时更低更偏向使用物理内存,减少磁盘 I/O。
- 启用 zswap(内核内存压缩缓存,减少落盘):
- 编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX_DEFAULT 增加参数:zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20
- 更新并重启:sudo update-grub && sudo reboot
- 启用 zram(在内存中创建压缩交换设备,优先于磁盘交换):
- 安装:sudo apt update && sudo apt install zram-config
- 说明:安装后自动启用,默认使用约内存的 1/2 作为压缩交换;可在 /etc/default/zramswap 中调整算法(如 ALGO=lz4)与大小。
五 生产环境实用建议
- 服务器策略:内存较大(如 ≥16GB)时,将 Swap 控制在4–8GB作为兜底,避免应用因内存紧张而频繁换页导致性能劣化。
- 多交换设备/文件:可同时使用多个交换文件或分区,系统会轮询使用以分散 I/O 瓶颈(适用于高负载与多磁盘场景)。
- 维护与排障:定期清理临时文件与日志、观察 free -h/swapon --show 与 vmstat/iostat,若发现 Swap 使用长期偏高或 I/O 压力异常,优先检查应用内存泄漏或考虑扩容内存。