在 CentOS(包括 CentOS 7 / 8 / Stream)上优化 swap(交换分区),通常从 使用场景、swap 大小、swappiness、IO 性能、替代方案 几个方面入手。下面按 实际运维经验 给你一套优化思路。
free -h
swapon -s
cat /proc/swaps
swappiness 决定系统 多早开始使用 swap
| 值 | 含义 |
|---|---|
| 0 | 尽量不用 swap(内存不足才用) |
| 10 | 推荐服务器 |
| 30 | 默认(CentOS) |
| 100 | 激进使用 swap |
cat /proc/sys/vm/swappiness
sysctl vm.swappiness=10
vi /etc/sysctl.conf
添加或修改:
vm.swappiness = 10
生效:
sysctl -p
✅ 推荐值
1~1010~3030~60vi /etc/sysctl.conf
推荐配置(服务器):
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
vm.vfs_cache_pressure = 50
说明:
| 内存 | swap 大小 |
|---|---|
| ≤ 2GB | 2 × RAM |
| 2–8GB | = RAM |
| 8–64GB | 0.5 × RAM |
| > 64GB | 4–16GB(或不用) |
dd if=/dev/zero of=/swapfile bs=1M count=8192
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
开机自动挂载:
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
swapon /swapfile1
swapon /swapfile2
⚠️ 不建议超过 2 个,否则 IO 抖动可能增加
数据库强烈建议:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
vm.swappiness = 1
并确保:
innodb_buffer_pool_size < 物理内存 70%-XX:+DisableExplicitGC
不要依赖 swap 跑 GC
✅ 可以关闭 swap 的情况:
关闭 swap:
swapoff -a
从 /etc/fstab 中注释 swap 行
⚠️ 风险:OOM 时直接 kill 进程
vmstat 1
sar -r 1
iostat -x 1
swap in/out 长期 > 0 说明有问题
vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
vm.vfs_cache_pressure = 50
swap 不是内存不够的解决方案,而是防止 OOM 的最后一道防线。
如果你愿意,可以告诉我:
我可以给你 一套完全贴合你环境的 swap 参数 ✅