什么是 Swap
在 Linux 系统中,SWAP(交换空间) 是物理内存的补充区域。当服务器物理内存资源紧张时,系统会把内存中不活跃的数据转移到磁盘 Swap 空间,释放物理内存给正在运行的活跃进程使用。
Swap 并不是真正增加物理内存,它依托磁盘读写,速度远低于内存。它的定位是应急缓冲,而不是解决内存不足的特效药,不能依靠 Swap 来根治程序 OOM 崩溃问题。
Swap 分为两种实现方式:swap 交换分区、swap 文件,云服务器大多使用 swap 文件部署,操作更灵活。
一、查看当前 SWAP 状态
登录服务器 SSH 终端,执行下面命令查看内存与 Swap 整体情况:
bash
free -h
输出会展示物理内存总大小、已用、空闲,以及 Swap 总大小、已使用、剩余容量。
查看 swap 详细来源(区分是 swap 文件还是磁盘分区):
bash
swapon --show
如果输出为空:代表当前服务器没有开启 Swap;
如果看到
/swapfile:代表使用 swap 文件;如果显示磁盘设备名:代表使用独立 swap 分区。
二、Swap 大小怎么设置
不同业务场景建议:
内存 ≤4G 小型服务器:Swap 大小建议等同于物理内存;
8G‑16G 通用业务服务器:推荐配置 2G‑4G Swap,用于内存瞬间冲高兜底;
32G 以上大内存服务器:配置 2‑4G Swap 即可,仅作为应急防护;
SSD 云服务器适合开启 Swap;机械硬盘环境不建议配置过大 Swap,会产生大量 IO,严重拖慢整机性能。
swappiness 参数:控制系统使用 Swap 的倾向,取值范围 0‑100。
推荐生产环境设置
vm.swappiness = 10,优先使用物理内存,仅在内存压力较高的时候使用交换空间,减少磁盘读写对业务性能的影响。数值越高,系统会越积极使用 swap,数据库类业务不建议使用高数值。
注意:Swap 无法修复程序本身内存溢出问题。当应用存在内存泄漏,Swap 只会延缓进程被系统杀死,想要彻底解决问题,需要优化应用程序本身。
三、创建 Swap 文件完整步骤
1、一键脚本(以 4G swapfile 为例,直接复制整条执行)
bash
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
sysctl -w vm.swappiness=10
echo "vm.swappiness=10" >> /etc/sysctl.conf
逐条解释:
fallocate -l 4G /swapfile:创建 4G 大小 swap 文件;chmod 600 /swapfile:设置权限,禁止普通用户读取;mkswap /swapfile:格式化为 swap 格式;swapon /swapfile:启用 swap;写入
/etc/fstab实现开机自动加载;设置 swappiness 参数,并且写入配置永久生效。
2、验证是否生效
bash
free -h
可以看到 Swap 一栏出现对应容量即为部署成功。
四、常用管理命令
临时关闭全部 Swap(重启会复原)
bash
swapoff -a
重新启用 Swap
bash
swapon -a
修改 swappiness 临时生效(重启失效)
bash
sysctl -w vm.swappiness=10
如果使用面板工具,一般在系统设置页面提供 Swap 图形化开关,填写对应 MB 数值即可一键开启,效果等同于命令行。
五、生产环境重要注意事项
Swap 是兜底防护,不要当作扩容内存手段,程序内存泄漏该崩溃还是会崩溃;
数据库类业务,swappiness 不要设置过高,过高会把数据库缓存刷入磁盘,性能暴跌;
SSD 适合开启 Swap;机械硬盘业务尽量少用 Swap;
系统重启后 Swap 失效,务必确认写入
/etc/fstab保证开机自动挂载;日常监控 Swap 使用率,如果长期大量占用 Swap,说明服务器物理内存已经不足,优先考虑升级内存;
不要把 Swap 放在性能差、IO 负载很高的磁盘上,会造成业务响应延迟
评论