Linux swap 要不要开:内存压力判断与安全配置
服务器偶发内存紧张时,swap 可以为部分内存页提供磁盘空间,但持续依赖换页可能增加业务等待。本文以 Ubuntu 24.04、根文件系统为本地 ext4 的普通虚拟机为例,使用新建交换文件演示。Btrfs、网络文件系统、容器内环境或已有特殊交换方案,不应直接套用下面步骤。
先判断是否真的存在内存压力
在服务器查看:
free -h
swapon --show
vmstat 1 10
findmnt -no FSTYPE /
df -h /
观察 available、交换空间使用量以及后续采样中的换入换出,而不是只看 free 很少。已有 swap 被占用,也不等于此刻正在频繁换页;需要结合请求延迟和持续采样判断。
如果内存占用随时间不断增长,先找进程或应用泄漏。增加 swap 可能延后故障,却不会消除根因。数据库、缓存、并发进程和备份任务同时运行时,也要先评估峰值是否可以错开。
创建前确认容量、路径和文件系统
交换文件要占用真实磁盘空间,并可能保存应用内存中的敏感内容。先确认存储保护方式、可用容量和现有交换配置,不要把唯一的数据盘空间全部分配出去。
下面的 2 GiB 是演示规模,不是所有服务器的推荐值。确认 /swap-demo 不存在、不是符号链接,并备份之后需要修改的 fstab。只在已核对的本地 ext4 环境执行,其他文件系统按其专用说明处理。swapon 手册特别说明了空洞文件、写时复制和不同文件系统的限制。
逐条创建并启用新文件
由管理员在服务器执行,每一步成功后才继续:
sudo dd if=/dev/zero of=/swap-demo bs=1M count=2048 conv=excl status=progress
sudo chmod 600 /swap-demo
sudo mkswap /swap-demo
sudo swapon /swap-demo
swapon --show
conv=excl 在目标已存在时拒绝覆盖;它仍不能代替事前人工核对。mkswap 会写入交换区域元数据,所以参数只能指向本次新建的专用文件,不能改成一个“看起来空闲”的磁盘分区。不要追加强制参数绕过警告。mkswap 手册说明了初始化行为及其风险。
确认输出中出现正确路径和预期容量,再查看业务延迟与磁盘负载。不要为了看到使用量上升,故意把生产服务器内存填满来测试。
开机启用与日常观察分开处理
只有确认需要长期保留时,再在备份后的 /etc/fstab 添加一次对应记录:
/swap-demo none swap sw 0 0
保留其他已有记录,不重复添加相同文件。修改后重新加载 systemd 的配置视图,并检查本次记录与当前启用状态;需要重启验收时安排维护窗口和控制台入口,不把立即重启作为创建过程的默认步骤。
不要把某个 swappiness 数字当成万能性能设置。它会影响回收倾向,适合结合负载测试后调整,而不是看一篇文章就全机改值。观察应覆盖正常高峰、发布和备份期间,确认换页没有把内存问题转成持续磁盘瓶颈。
停用前先确认内存能接住数据
撤销新交换文件不能直接删除文件。先评估当前内存余量及该区域已用量,必要时降低业务负载或增加内存,再对确认的文件运行 sudo swapoff /swap-demo。停用可能失败,也可能造成明显压力,不要在内存已接近耗尽时执行全局 swapoff。
确认 swapon --show 已不再列出本次文件后,再移除对应 fstab 记录并处理文件。若停用条件不满足,保留交换空间并安排更稳妥的维护窗口。回退的目标是恢复原有配置与稳定业务,而不是无论代价都立即清掉刚建的文件。