云服务器内存告急?手把手教你配置 Swap 交换内存,让系统告别卡顿崩溃

为什么你的云服务器总在深夜“掉链子”?

很多朋友在购买云服务器后,经常会遇到这样的场景:网站流量稍微上来一点,或者后台跑了个编译任务,系统内存瞬间被打满,紧接着 SSH 连接卡死,网站直接 502。这时候去控制台一看,发现内存使用率 100%,而 Swap 分区却显示为 0。

其实,这并不代表你的服务器配置太低。恰恰相反,很多时候是因为我们忽略了 Linux 系统中一个非常重要的“兜底”机制——Swap 交换内存。简单来说,Swap 就是拿硬盘空间临时充当内存使用。当物理内存(RAM)不够时,系统会把不活跃的内存数据挪到 Swap 分区里,从而释放出宝贵的物理内存给当前正在运行的程序。

对于云服务器来说,尤其是入门级配置(比如 1G 或 2G 内存的实例),合理配置 Swap 是提升系统稳定性的关键一步。它不能让你跑大型应用,但能有效防止 OOM(内存溢出)导致的进程被杀、服务崩溃。今天,我们就来彻底讲清楚这件事。

配置前必读:云服务器与 Swap 的“爱恨情仇”

在动手操作之前,有几个概念需要先厘清。很多云厂商的默认镜像(比如 CentOS、Ubuntu)虽然预装了 Swap,但往往容量极小甚至没有。同时,并不是所有云盘都适合做 Swap

  • 本地盘 vs 云盘:如果您的服务器是本地盘(性能较高),Swap 效果较好;如果是网络云盘(如普通 ESSD),IOPS 有限,Swap 读写会稍慢,但作为应急兜底依然非常必要。
  • Swap 的合理大小:传统说法是物理内存的 2 倍,但在云服务器场景下,建议物理内存小于 2G 时,设置 2G 的 Swap;物理内存大于 2G 时,设置与物理内存等量或 1.5 倍即可,太大反而是浪费磁盘空间。
  • Swappiness 参数:这是内核参数,决定系统“多积极”地使用 Swap。默认值通常是 60,对于云服务器,建议调整为 10 左右,让系统优先使用物理内存,仅在必要时才动用 Swap,避免频繁磁盘读写拖慢速度。

实操教程:从零开始为你的云服务器配置 Swap

下面我们以最常用的 CentOS 7/8 与 Ubuntu 20.04/22.04 系统为例,使用 swapfile 文件的方式(而非单独分区),这种方式更灵活,且无需重新分区,非常适合云服务器。

第一步:检查当前系统 Swap 状态

首先,通过 SSH 登录服务器,执行以下命令查看当前内存和 Swap 使用情况:

free -h

如果看到 Swap 一行的 total0B,则说明系统尚未配置 Swap。同时,我们可以使用 swapon --show 确认是否有活跃的交换空间。

第二步:创建 Swap 文件

我们将在根目录创建一个名为 swapfile 的文件。这里以创建 2G 大小的 Swap 为例(请根据你的磁盘剩余空间调整 count 参数,bs=1M count=2048 即 2G)。

# 创建文件(注意:此操作需要 root 权限)
sudo fallocate -l 2G /swapfile

# 如果 fallocate 命令报错(部分文件系统不支持),则使用 dd 命令:
# sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

第三步:设置正确的文件权限

这一步极其重要!Swap 文件中包含内存数据,如果权限过于宽松,普通用户就能读取到敏感信息。请务必执行:

sudo chmod 600 /swapfile

第四步:格式化为 Swap 文件系统并启用

# 将文件格式化为 swap 格式
sudo mkswap /swapfile

# 立即启用该 swap 文件
sudo swapon /swapfile

此时再次执行 free -h,你应该能看到 Swap 的总量已经变成 2G。系统稳定性已经得到了初步保障。

第五步:设置开机自动挂载(关键!)

如果不做这一步,重启服务器后 Swap 就会失效。我们需要修改 /etc/fstab 文件:

sudo bash -c 'echo "/swapfile none swap sw 0 0" >> /etc/fstab'

建议修改后执行 mount -a 验证一下 fstab 文件是否正确,避免因配置错误导致开机失败。

第六步:优化系统内核参数(Swappiness)

为了让系统在内存充足时不“偷懒”用 Swap,我们需要调整 swappiness 值。编辑配置文件:

sudo sysctl vm.swappiness=10

为了让该设置永久生效,将其写入配置文件:

sudo bash -c 'echo "vm.swappiness = 10" >> /etc/sysctl.conf'

对于内存极小的服务器(如 512M),建议设置为 20 左右,具体可根据实际负载微调。

如何验证配置是否生效?

配置完成后,重启服务器(或执行 sudo sysctl -p 加载参数),然后使用 free -h 查看。如果 Swap 行显示了正确的大小,并且 siso 列有数据流动,说明 Swap 正在正常工作。

此外,你可以尝试用 stress 工具(需安装)压测内存,观察 Swap 是否被成功调用,这能直观感受系统在内存耗尽时依然能保持 SSH 响应。

进阶技巧:什么时候该用,什么时候该关?

虽然 Swap 是“救命稻草”,但它并不是万能的。如果长期发现 Swap 使用率超过 50%,说明你的物理内存已经严重不足,此时应该考虑升级配置,而不是单纯依赖 Swap。

另外,对于数据库(如 MySQL、Redis)这类对延迟极其敏感的服务,Swap 反而可能成为性能杀手。如果磁盘是普通云盘,建议通过 vm.swappiness=01 来尽量禁用 Swap 倾向,避免数据库进程被换出到磁盘导致查询延迟飙升。

如果你使用的是 Docker 部署服务,请注意 Docker 容器默认不会继承宿主机的 Swap 限制。关于容器性能调优,可以参考我们之前分享的 《别再手动装环境了!用 Docker Compose 一键拉起 WordPress,十分钟上线你的个人站点》,那里有关于内存限制的详细讨论。

写在最后:稳定性是运维的第一要义

配置 Swap 只是服务器性能优化的一小步。很多朋友在购买服务器后,往往会忽略基础的安全与性能调优。比如,你是否还在使用简单的密码登录?是否没有设置防火墙?关于服务器安全加固,强烈建议阅读 《黑客天天扫你的服务器?关掉密码登录,用 SSH 密钥对一把锁死暴力破解》,这是每个站长都必须做好的基本功。

最后,如果您正在规划新业务,选一台内存充足、带宽达标的靠谱云服务器远比后期折腾 Swap 更重要。如果你还在纠结带宽选择,不妨看看 《云服务器网卡带宽到底怎么选?全网拉测性能指标的一次深度拆解》,避免因带宽不足导致业务受损。

希望这篇教程能帮你解决服务器的“内存焦虑”。如果你在配置过程中遇到任何报错,欢迎在评论区留言,我们一起探讨。

延伸阅读推荐

💡 【站长特惠服务推荐】

新手搭建网站或部署容器,推荐选择高性价比独享云服务器。点击下方通道可享受限时折扣与专属优惠券:

👉 点此前往领取云服务器限时优惠券

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部