1核2G 或 2核2G 的 VPS 跑 WordPress、Docker 和数据库时,内存经常比 CPU 更早到达极限。内存用完后,服务可能突然被系统终止,网站直接出现 502。
不少教程会让新手马上添加 Swap,甚至照着物理内存的两倍来设置。Swap 确实能缓冲短时内存压力,但它使用的是磁盘,速度远低于真正的内存,设置得再大也不能把小内存 VPS 变成高配服务器。

今天这篇文章就来聊聊,VPS 什么情况下需要 Swap、设置多大更合适、如何创建 Swap 文件,以及哪些业务不应该依赖 Swap 硬撑。
一、Swap到底有什么用?
Swap 是 Linux 使用的交换空间,可以是独立分区,也可以是普通磁盘上的交换文件。当物理内存紧张时,内核会把暂时不活跃的内存页面转移到 Swap,为更需要内存的进程腾出空间。
它最大的价值是给系统留一层缓冲。没有 Swap 的小内存 VPS,一旦瞬间超出内存上限,可能很快触发 OOM Killer,数据库、PHP-FPM 或 Node.js 进程会被强制终止。
但 Swap 的读写速度受磁盘影响。Swap 是防止内存瞬时耗尽的安全垫,不是物理内存的平替。
二、哪些VPS适合添加Swap?
比较适合添加 Swap 的场景有这些:
- 1GB—4GB 内存的小型 VPS,需要承受偶发流量或定时任务。
- WordPress、MySQL、Docker 等服务存在短时内存峰值。
- 系统偶尔触发 OOM,但日常可用内存仍有余量。
- 编译、更新或备份时会短暂占用更多内存。
如果内存长期接近 100%,Swap 一直被大量读写,说明配置已经不适合当前业务。继续扩大 Swap 只会让服务从崩溃变成持续卡顿。
三、先检查服务器有没有Swap
运行下面两个命令:
free -h
swapon --show
free -h 会显示内存和 Swap 的总量、已用量;swapon –show 可以看到当前启用的交换分区或文件。
还可以检查最近是否发生过 OOM:
journalctl -k | grep -i -E "oom|out of memory|killed process"
看到 Killed process 不要只补 Swap,还要确认是哪个进程增长过快,是否存在内存泄漏或配置错误。
四、Swap设置多大比较合适?
过去常见的两倍内存规则并不适合所有 VPS。现代 Linux 更应该根据业务负载、磁盘性能和内存峰值来决定。
| 物理内存 | 小型网站建议Swap | 说明 |
|---|---|---|
| 1GB | 1GB—2GB | 防止更新、编译和数据库峰值 |
| 2GB | 1GB—2GB | 多数轻量业务够用 |
| 4GB | 1GB—2GB | 以应急缓冲为主 |
| 8GB以上 | 0GB—2GB | 根据业务判断 |
数据库或高并发业务不能只套表格。内存峰值大、磁盘 IO 慢时,Swap 太多会造成明显延迟。小型 VPS 先从 1GB 或 2GB 开始,比直接创建超大 Swap 更稳妥。
五、Ubuntu和Debian怎么创建Swap文件?
先确认磁盘有足够空间,然后创建一个 2GB 的交换文件:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
检查是否启用:
swapon --show
free -h
想让重启后继续生效,在 /etc/fstab 中加入:
/swapfile none swap sw 0 0
修改 fstab 前最好先创建快照或备份。路径或格式写错可能影响系统启动。
六、swappiness应该怎么设置?
vm.swappiness 控制内核使用 Swap 的倾向,但它不是简单的百分比开关。先查看当前值:
cat /proc/sys/vm/swappiness
小型网站可以从 10—20 观察。临时设置为 10:
sudo sysctl vm.swappiness=10
想持久生效,可以在 /etc/sysctl.d/99-swappiness.conf 写入:
vm.swappiness=10
设置为 0 也不等于完全禁用 Swap。内核文档说明,0 会显著降低主动换出倾向,但在内存压力下仍可能使用。
七、哪些情况不应该依赖Swap?
实时数据库、游戏服务、交易程序和延迟敏感 API,一旦频繁访问 Swap,响应时间会明显抖动。这些业务更需要足够的物理内存。
NVMe 磁盘能减轻一部分等待,但仍然比 RAM 慢。Swap 持续增长、si 和 so 长期有数据、系统频繁卡顿时,应先优化程序或升级内存。
需要升级配置时,关注能否平滑扩容、是否支持快照以及节点稳定性。可以对比 萤光云 和 LightNode 的配置调整方式,再按监控数据决定,而不是因为一次峰值直接买高配。
八、我的实际建议
对 1GB—2GB 的 VPS,我通常会保留少量 Swap,但同时设置内存告警。Swap 偶尔使用没有问题,长期占用并持续换入换出才值得警惕。
每次增加 Swap 后,都要继续观察 free -h、vmstat 1 和服务日志。能避免 OOM 不等于性能正常,服务器是否频繁等待磁盘才是下一步重点。
常见问题
问:添加Swap需要重启VPS吗?
答:不需要,执行swapon后即可生效。
问:Swap越大越好吗?
答:不是,过大不能替代内存,还可能掩盖瓶颈。
问:SSD做Swap会损坏硬盘吗?
答:偶尔使用影响有限,持续大量写入需要重视。
问:Docker容器可以使用宿主机Swap吗?
答:取决于容器限制和宿主机cgroup配置。
问:如何删除Swap文件?
答:先swapoff,再删除fstab条目和文件。
温馨提示
创建 Swap 之前先确认内存为什么不足。插件过多、数据库缓存过大、PHP-FPM 进程数不合理和程序内存泄漏,都可能让 Swap 很快被占满。
更稳妥的顺序是:先定位内存消耗,再设置少量 Swap 作为缓冲,最后根据连续监控决定优化还是升级内存。

