
在Linux服务器运维过程中,虚拟内存(又称Swap分区/交换分区)是一个容易被忽略但至关重要的组件。很多运维新手会疑惑:Linux虚拟内存到底是什么?什么时候该开、什么时候该关?开启和关闭Swap有哪些注意事项?本文结合实操经验,全面拆解Linux虚拟内存的核心知识点,从基础概念到实操步骤,再到优缺点分析,帮你快速掌握Swap的正确使用方式,避免因配置不当导致服务器卡顿、业务延迟等问题。
一、Linux虚拟内存(Swap)是什么?
简单来说,Linux虚拟内存(Swap)就是从服务器硬盘中划分出的一块专用空间,临时当作物理内存(RAM)来使用。我们可以把它理解为“物理内存的备胎”——当物理内存不够用时,系统会自动将暂时闲置的程序数据从物理内存转移到Swap分区,释放物理内存给正在运行的核心业务,避免服务器直接卡死或出现OOM(内存溢出)杀进程的情况。
这里要明确一个关键区别:物理内存(RAM)是高速读写的硬件,速度极快,是程序运行的首选空间;而Swap分区基于硬盘,读写速度比物理内存慢几十甚至上百倍,仅作为应急兜底使用,不可长期依赖。
二、Linux虚拟内存(Swap)核心作用
Swap的核心价值在于“兜底”和“优化”,具体作用主要有4点:
- 防宕机兜底:当物理内存完全跑满时,Swap会临时承接闲置程序,避免服务器直接崩溃、进程被强制杀死,给运维人员留足排查时间;
- 低配机续命:对于1G、2G等小内存服务器,开启Swap可以让服务器同时运行更多程序,避免因内存不足无法启动服务;
- 优化内存分配:将长期闲置的后台进程转移到Swap,释放物理内存给前台核心业务(如网站、数据库),提升业务运行流畅度;
- 支持休眠功能:Linux服务器的休眠功能必须依赖Swap分区,休眠时系统会将内存中的所有数据写入Swap,唤醒时再读取回物理内存。
三、实操:Linux查看、开启、关闭Swap(一步到位)
3.1 查看Swap状态(最常用)
free -h
- total swap:虚拟内存总大小;
- used swap:正在使用的虚拟内存(used值越高,服务器越卡顿,说明物理内存已不足);
- free swap:空闲的虚拟内存。
若想查看Swap文件/分区的具体位置,执行:
swapon --show
3.2 开启Swap(临时+永久,低配机适用)
swapon -a
2. 永久开启(重启不恢复):编辑/etc/fstab文件,取消Swap行前的#注释,保存退出后重启服务器即可。
vi /etc/fstab
# 取消如下行的注释(去掉前面的#)
# /swapfile none swap defaults 0 0
# 保存退出::wq
# 重启生效
reboot
3.3 新建/调整Swap大小(示例:新建4G Swap)
# 1. 创建4G交换文件
dd if=/dev/zero of=/swapfile bs=1M count=4096
# 2. 设置权限(避免其他用户访问)
chmod 600 /swapfile
# 3. 格式化Swap文件
mkswap /swapfile
# 4. 启用Swap
swapon /swapfile
# 5. 写入开机自启(永久生效)
echo '/swapfile none swap defaults 0 0' >> /etc/fstab
3.4 关闭Swap(临时+永久,生产环境常用)
对于4G以上内存的生产服务器(如网站、数据库、Docker集群),建议关闭Swap,避免其拖慢服务器速度、损耗硬盘寿命。关闭分为临时关闭(立即生效,重启后恢复)和永久关闭(重启不恢复),两步都执行才能彻底关闭。
1. 临时关闭(立即生效):
swapoff -a
2. 永久关闭(重启不恢复):
sed -i '/swap/s/^/#/' /etc/fstab
3. 优化配置(让系统优先使用物理内存):
echo vm.swappiness=0 >> /etc/sysctl.conf
sysctl -p
4. 验证是否关闭:再次执行free -h ,若Swap一行显示“0”,则说明关闭成功。
四、开启Linux Swap的优缺点(必看!避免踩坑)
很多运维人员会纠结:到底该不该开启Swap?其实答案很简单——看内存大小和业务场景。先明确开启Swap的优缺点,再结合自身情况判断。
4.1 开启Swap的优点
- 兜底防崩溃:物理内存耗尽时,避免服务器直接宕机、进程被OOM杀死,保障服务连续性;
- 适配低配机:小内存服务器(1G/2G)开启Swap后,可同时运行更多程序,提升服务器利用率;
- 优化内存使用:将闲置进程转移到Swap,释放物理内存给核心业务,减少内存浪费;
- 支持休眠:满足服务器休眠需求,适用于需要定期休眠的场景(如测试机)。
4.2 开启Swap的缺点
- 速度极慢:Swap基于硬盘读写,速度比物理内存慢几十上百倍,大量使用会导致服务器卡顿、业务响应延迟;
- 损耗硬盘寿命:频繁读写Swap会增加硬盘IO压力,尤其是SSD硬盘,长期使用会加速硬盘损耗;
- 抢占IO资源:Swap的读写会占用磁盘IO,影响日志写入、数据库读写等核心业务的IO性能;
- 隐藏内存问题:Swap的兜底作用可能会掩盖物理内存不足的问题,导致运维人员无法及时发现并升级内存,长期依赖Swap会让服务器性能持续下降。
五、Linux Swap最佳实践(适配不同场景)
5.1 按内存大小设置Swap(推荐)
- 内存 ≤2G:建议开启Swap,大小设置为物理内存的2倍(如1G内存,设置2G Swap);
- 内存 2G~8G:建议开启Swap,大小等于物理内存(如4G内存,设置4G Swap);
- 内存 ≥16G:建议关闭Swap(纯吃硬盘、拖慢速度,生产环境优先保证性能);
- 内存 8G~16G:根据业务判断,高并发业务(如网站、数据库)建议关闭,离线业务、测试机可开启(大小设为4G~8G)。
5.2 按业务场景设置Swap
- 建议开启Swap:1G/2G小内存机器、测试机、离线服务器、需要休眠的服务器;
- 建议关闭Swap:4G以上内存、生产网站、数据库服务器、Docker集群、K8s集群、高并发业务服务器。
5.3 swappiness优化(关键参数)
swappiness是Linux系统控制Swap使用倾向的参数,取值范围0~100:
-
0:尽量不用Swap,仅在物理内存完全耗尽时使用;
-
100:优先使用Swap,尽可能将物理内存中的数据转移到Swap;
-
推荐配置:生产服务器设为10(极少使用Swap),低配机器设为30(适度使用Swap)。
修改swappiness并永久生效:
echo vm.swappiness=10 >> /etc/sysctl.conf
sysctl -p