Ubuntu Swapper如何节省资源
小樊
38
2025-12-14 00:54:17
Ubuntu Swapper 节省资源的实用做法
一 核心思路
- 降低磁盘交换的触发频率:通过调低内核参数 vm.swappiness,让系统尽量把数据留在物理内存中,只有在必要时才写入交换空间。
- 用内存压缩减少磁盘 I/O:启用 zswap(磁盘交换前的压缩缓存)与 zram(在内存中创建压缩块设备充当交换),显著减少对慢速磁盘的依赖。
- 合理配置交换空间大小与介质:避免过大或过小;优先将交换放在 SSD/NVMe 上,减少访问延迟。
- 持续监测与清理:用 free -h、vmstat 1、iostat -x 1 观察 si/so(换入/换出)与磁盘 %util,定位异常占用并优化应用内存使用。
二 快速配置步骤
- 查看现状
- 查看交换与内存:free -h
- 查看启用的交换:sudo swapon --show
- 实时观察换入换出:vmstat 1(关注 si/so 列)
- 调整 swappiness(减少不必要的磁盘交换)
- 临时生效:sudo sysctl vm.swappiness=10
- 永久生效:在 /etc/sysctl.conf 添加 vm.swappiness=10,执行 sudo sysctl -p
- 启用 zswap(先压缩再落盘,降低磁盘 I/O)
- 编辑 /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 install zram-config
- 启用后系统会自动创建压缩交换设备(通常占用约 50% RAM),可在 /etc/default/zramswap 中按需调整算法(如 ALGO=lz4)
- 调整交换大小与介质(按需)
- 建议大小(桌面场景):
- RAM ≤ 2GB:Swap = 2× RAM
- 2GB < RAM ≤ 8GB:Swap = RAM
- RAM > 8GB:Swap = 4–8GB
- 若需休眠(hibernate):Swap ≥ RAM + 2GB
- 创建/调整交换文件(示例 4GB):
- 禁用旧交换:sudo swapoff /swapfile
- 创建文件:sudo fallocate -l 4G /swapfile
- 安全权限:sudo chmod 600 /swapfile
- 格式化:sudo mkswap /swapfile
- 启用:sudo swapon /swapfile
- 永久生效:在 /etc/fstab 添加 /swapfile none swap sw 0 0
- 介质优先级:将交换放在 SSD/NVMe 上,避免机械硬盘与 NFS 等网络存储。
三 场景化建议
- 桌面与交互响应优先:将 vm.swappiness 设为 10–30,启用 zram 作为第一层交换,必要时叠加 zswap,尽量减少磁盘交换引起的卡顿。
- 服务器稳定优先:将 vm.swappiness 设为 1–10,保留适量磁盘交换以防内存耗尽,同时用 zswap 降低磁盘写入压力;监控 si/so 与磁盘 %util,避免 I/O 瓶颈。
- 低内存设备(如 4GB 以下):优先启用 zram,并配置 4–8GB 的磁盘交换(如需休眠则满足 RAM+2GB),在有限硬件上取得更好的响应与稳定性平衡。
四 监控与排错
- 快速体检
- 内存与交换概况:free -h
- 实时内存/交换与 I/O:vmstat 1
- 磁盘 I/O 负载:iostat -x 1(若 %util 接近 100% 且 si/so 高,说明交换成为瓶颈)
- 优化应用与系统
- 找出内存大户:top/htop(按 M 按内存排序),关闭不必要进程/服务
- 清理无用资源:sudo apt clean && sudo apt autoclean
- 谨慎清理缓存(仅在内存充足时):sync && echo 1 | sudo tee /proc/sys/vm/drop_caches
- 维护与取舍
- 移除未使用的交换文件/分区,避免资源浪费与性能下降
- 若长期高占用交换,优先考虑增加物理内存(RAM),这是最根本的解决路径。