如何通过centos swapper节省内存
小樊
47
2026-01-08 03:09:39
术语澄清与总体思路
- swapper通常指内核的kswapd0进程,负责内存回收与页面换出;而日常说的“swap”是交换空间(分区或文件)。要“节省内存”,本质是减少不必要的换出,让数据尽量留在物理内存中,从而降低磁盘 I/O 与延迟。
快速做法
- 降低内核使用 swap 的倾向:将 vm.swappiness 调低(默认常见为60,很多 CentOS 7 环境为30)。临时生效:
sudo sysctl vm.swappiness=10;永久生效:在 /etc/sysctl.conf 加入 vm.swappiness=10 后执行 sudo sysctl -p。注意:vm.swappiness=0 并非完全禁用 swap,只是尽量不用,内存紧张时仍会使用。
- 刷新已用的 swap(仅在可短暂中断业务的窗口执行):先确保有足够的空闲内存,再执行
sudo swapoff -a && sudo swapon -a,把页面迁回内存后重新启用 swap。此操作在内存紧张时可能很慢,甚至触发 OOM。
- 容器场景控制内存与 swap:如 Docker 未限制 swap,容器可能提前触发换出。建议为容器设置内存上限,并显式配置内存+swap(例如
--memory=4g --memory-swap=4g 表示不允许使用 swap),避免无约束使用导致系统级 swap 增长。
Swap 大小与取舍
- 合理规划 swap 容量,避免过大或过小。常见经验值:内存≤2GB 设为其2倍;>2GB 且 ≤8GB 设为等同内存;>8GB 设为≥4GB 且 ≤8GB。若内存充足且为数据库/缓存/实时业务等对延迟敏感的场景,可进一步降低 swap 配额,甚至在特定维护窗口内临时关闭 swap 进行验证(前提是业务允许)。
- 若系统长期内存使用率超过70%,应优先评估扩容内存或优化应用内存占用,而非一味压低 swap 使用。
监控与验证
- 观察整体内存与 swap:
free -h、swapon --show、cat /proc/swaps。
- 观察进程与内核行为:
top/htop(关注 RES/SWAP 列)、vmstat 1 5(关注 si/so 是否持续不为 0)、sar -W 1 5(若安装 sysstat)。这些指标能帮助你判断调参后是否减少了不必要的换入换出。
常见误区与建议
- 将 swappiness 设为 0 并不会禁用 swap,只是“尽量不用”;在内存真正吃紧时仍会发生换出,避免误以为“彻底关闭了 swap”。
- 看到“内存还有很多却用了 swap”,常见原因包括:历史页面被换出尚未回收、服务设置了内存限制但未限制 swap、以及系统 slice(如 machine.slice/system.slice/user.slice)占用等。应结合监控定位来源,再决定是调参、限流还是扩容。