技术文章
2026-07-23
103 阅读
ECS(Linux)配置Swap交换文件
重要提醒:普通高效云盘/普通云盘IO性能差,频繁使用Swap会严重卡顿;SSD云盘本地SSD适合开启Swap;Swap只是防止OOM兜底,不能替代物理内存。 系统:CentOS 7/8、Rocky、Ubuntu、Alibaba Linux通用
一、先检查当前Swap
# 查看swap状态 swapon --show free -h
无输出=没有swap,可以开始操作。
二、创建Swap文件(示例:4G,按需修改大小)
方案1:fallocate(速度更快,推荐)
# 创建4G交换文件,把4G改成2G/8G即可 fallocate -l 4G /swapfile
如果报错
Operation not supported(XFS/Btrfs部分环境),改用下面dd方案:
方案2:dd兼容方案
# 4G:bs=1M count=4096;2G=count=2048 dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress
三、权限、格式化、启用Swap
# 权限必须600,安全限制 chmod 600 /swapfile # 格式化为swap空间 mkswap /swapfile # 立即启用 swapon /swapfile
执行完再次 free -h 就能看到Swap容量。
四、设置开机自动挂载(重启不丢失!关键步骤)
备份fstab防止改错:
cp /etc/fstab /etc/fstab.bak
写入开机配置:
echo '/swapfile none swap sw 0 0' >> /etc/fstab
✅ 校验fstab配置是否正确(避免服务器无法启动)
swapoff -a swapon -a swapon --show
正常显示swap信息代表配置无误;如果报错,立刻删除 /etc/fstab 新增那一行!
五、内核调优 vm.swappiness(控制系统多激进使用swap)
取值范围0~100
1~10(推荐数据库/Redis/生产业务):尽量少使用swap
30:通用Web服务器默认
60:系统默认值
临时生效(重启失效)
sysctl vm.swappiness=10
永久生效
echo 'vm.swappiness=10' >> /etc/sysctl.conf sysctl -p
可选参数优化(缓存回收)
echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf sysctl -p
常用运维命令
关闭并删除swap(需要扩容swap时操作)
swapoff /swapfile rm -f /swapfile # 同时删掉/etc/fstab内对应的那一行
完整一键脚本(直接复制执行,创建4G Swap)
#!/bin/bash fallocate -l 4G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo '/swapfile none swap sw 0 0' >> /etc/fstab echo 'vm.swappiness=10' >> /etc/sysctl.conf sysctl -p free -h
大小推荐参考(ECS云服务器)
≤2G内存:Swap = 2~4G
2G~8G内存:Swap = 4G
>8G内存:4G足够(仅作为OOM缓冲,不建议很大)
常见坑
不要把swap放在挂载的外部数据盘 /mnt:很多ECS重启磁盘挂载顺序变动,swap挂载失败
fstab写错会导致服务器启动卡住,操作前务必备份
使用普通云盘不要设置过大swap,大量换页会造成服务器IO打满卡死
如果你告诉我ECS系统版本、内存大小,我可以直接给你适配好大小的一键命令。