swappiness值应依工作负载类型设定:数据库或java应用设1–10,web服务器设10–30,桌面环境设30–60;默认60过于激进,需结合vfs_cache_pressure=50协同调优以避免缓存失衡推高swap使用。

swappiness 值到底设多少才合理
CentOS 7 默认的 swappiness 是 60,这意味着内核在物理内存使用率刚过一半时就倾向把不活跃页换出到 swap——对多数服务来说太激进了。真实场景里,这个值不是“越小越好”,而是要看 workload 类型:
- 数据库(MySQL/PostgreSQL)或 Java 应用:设
1–10,避免关键进程因换页抖动被拖慢 - Web 服务器(Nginx + PHP-FPM)或中等负载业务:
10–30是平衡点,留出缓冲但不放任换页 - 桌面环境或开发机:可放宽到
30–60,兼顾响应速度与后台程序驻留 -
0并不等于“禁用 swap”,只是禁止主动换出匿名页(文件缓存仍可回收);1才是实际意义上的最低积极度
临时修改 vs 永久生效:别只改一半
很多人执行了 sysctl vm.swappiness=10 看着生效了就以为搞定,结果重启后打回原形。临时修改只影响当前运行时,必须同步写入配置文件才能持久:
- 临时生效(立即起效,重启丢失):
sudo sysctl vm.swappiness=10 - 永久生效需两步:
→ 写入配置:echo "vm.swappiness=10" >> /etc/sysctl.conf
→ 加载新配置:sudo sysctl -p - 验证是否真正落地:
cat /proc/sys/vm/swappiness,输出必须是目标值
为什么改了 swappiness 还在疯狂 swap?检查 vfs_cache_pressure
swap 活跃不单看 swappiness,vfs_cache_pressure 同样关键。默认值 100 表示内核会 aggressively 回收 dentry/inode 缓存,这反而可能加剧内存压力,间接推高 swap 使用。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 若观察到
free -h中buff/cache占比异常低、但SwapUsed却持续上升,大概率是缓存被过度回收逼出了 swap - 建议同步调低:
echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf && sudo sysctl -p - 该参数不影响 swap 直接行为,但能缓解因缓存失衡引发的连锁换页
swap 文件启用后没出现在 free 输出?权限或 fstab 配置错了
常见现象:swapon /swapfile 执行无报错,但 free -h 的 Swap: 行仍是 0B。问题通常卡在这三处:
-
/swapfile权限不是600:sudo chmod 600 /swapfile,否则swapon会静默拒绝 -
mkswap没成功执行,或执行后未swapon;可用swapon --show确认是否真被激活 -
/etc/fstab添加行格式错误,比如多空格、路径拼错、或类型写成swp而非swap;正确格式是:/swapfile swap swap defaults 0 0
swap 不是“配完就完事”的开关,它和物理内存、缓存策略、应用行为深度耦合。调一个参数前,先用 free -h 和 cat /proc/meminfo | grep -i swap 看清当前状态,否则很容易误判效果。










