温馨提示×

Centos swap如何优化

小樊
35
2026-08-29 13:15:38
栏目: 智能运维

CentOS(包括 CentOS 7 / 8 / Stream)上优化 swap(交换分区),通常从 使用场景、swap 大小、swappiness、IO 性能、替代方案 几个方面入手。下面按 实际运维经验 给你一套优化思路。


一、先判断:你真的需要优化 swap 吗?

✅ 需要优化 swap 的情况

  • 内存经常耗尽(OOM)
  • 数据库 / Java 应用频繁使用 swap
  • 系统响应变慢、负载高
  • swap 使用率长期 > 30%

❌ 不推荐强依赖 swap 的情况

  • 高并发数据库(MySQL / PostgreSQL)
  • 延迟敏感服务(Redis、实时交易)
  • 云服务器(很多云厂商默认不推荐 swap)

二、CentOS swap 基本优化(必做)

1️⃣ 查看当前 swap 情况

free -h
swapon -s
cat /proc/swaps

2️⃣ 调整 swappiness(最重要)

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~10
  • 普通应用服务器:10~30
  • 桌面 / 开发机:30~60

3️⃣ 优化 dirty page & 内存回收(进阶)

vi /etc/sysctl.conf

推荐配置(服务器):

vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
vm.vfs_cache_pressure = 50

说明:

  • 减少写 swap 前的脏页堆积
  • 控制 page cache 回收速度

三、swap 大小如何设置(最佳实践)

官方建议(Red Hat 推荐)

内存 swap 大小
≤ 2GB 2 × RAM
2–8GB = RAM
8–64GB 0.5 × RAM
> 64GB 4–16GB(或不用)

实际建议(生产环境)

  • 16~64GB 内存:swap 8~16G
  • 数据库服务器:swap 4~8G,仅防 OOM
  • 容器 / k8s:通常 关闭 swap

四、swap 文件 vs swap 分区(CentOS)

✅ swap 文件(推荐)

  • 灵活
  • 可随时扩容
  • 不影响磁盘分区

创建 swap 文件示例

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

❌ swap 分区(老方案)

  • 调整麻烦
  • LVM 下尚可
  • 新系统不推荐

五、swap IO 性能优化(非常关键)

1️⃣ swap 放 SSD(强烈推荐)

  • swap 在 HDD 上 = 性能灾难
  • 云服务器:系统盘 SSD 即可

2️⃣ 使用多个 swap(慎用)

swapon /swapfile1
swapon /swapfile2

⚠️ 不建议超过 2 个,否则 IO 抖动可能增加


3️⃣ 禁用 swap 的透明大页(THP)

数据库强烈建议:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

六、数据库 / Java 场景下 swap 专项优化

MySQL / PostgreSQL

vm.swappiness = 1

并确保:

  • innodb_buffer_pool_size < 物理内存 70%
  • 不要使用 swap 作为“内存扩展”

Java 应用

-XX:+DisableExplicitGC

不要依赖 swap 跑 GC


七、什么时候应该完全关闭 swap?

✅ 可以关闭 swap 的情况:

  • 内存充足(≥ 32GB)
  • 延迟敏感型服务
  • 容器 / Kubernetes

关闭 swap:

swapoff -a

/etc/fstab 中注释 swap 行

⚠️ 风险:OOM 时直接 kill 进程


八、检查 swap 是否正常

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 的最后一道防线。

如果你愿意,可以告诉我:

  • CentOS 版本
  • 内存大小
  • 是否跑数据库 / Java / Docker
  • 是否是云服务器

我可以给你 一套完全贴合你环境的 swap 参数

0