小内存云服务器必备:给 Ubuntu 配置 Swap 并调优 swappiness

举报
yd_257918670 发表于 2026/10/22 07:15:38 2026/10/22
【摘要】 入门级云服务器常常只有 1~2G 内存,跑个 Docker 容器、编译一下前端项目,或者 pip 安装一个带 C 扩展的包,就可能触发 OOM(内存耗尽),进程被内核直接杀掉。最省钱的缓解办法是配置 Swap(交换空间):当物理内存不够时,把暂时不用的内存页换到磁盘上。本文以 Ubuntu 24.04 为例,介绍如何用交换文件配置 Swap,以及如何调优相关参数。 一、先确认当前状态free...

入门级云服务器常常只有 1~2G 内存,跑个 Docker 容器、编译一下前端项目,或者 pip 安装一个带 C 扩展的包,就可能触发 OOM(内存耗尽),进程被内核直接杀掉。最省钱的缓解办法是配置 Swap(交换空间):当物理内存不够时,把暂时不用的内存页换到磁盘上。本文以 Ubuntu 24.04 为例,介绍如何用交换文件配置 Swap,以及如何调优相关参数。

一、先确认当前状态

free -h
swapon --show

如果 swapon --show 没有任何输出、free -h 里 Swap 一行全是 0,说明系统还没有交换空间。很多云厂商的公共镜像默认不开 Swap,需要自己加。

再顺手看一下磁盘剩余空间,交换文件会占用对应大小的磁盘:

df -h /

二、创建交换文件

内存 2G 左右的机器,一般配置 1~2G Swap 足够。下面创建一个 2G 的交换文件:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

几点说明:

  1. fallocate 速度很快。如果文件系统不支持(个别情况下 swapon 会报 “invalid argument”),可以改用 sudo dd if=/dev/zero of=/swapfile bs=1M count=2048。
  2. chmod 600 很重要,交换文件里可能包含任意进程的内存内容,不能让普通用户读取。
  3. 执行完再用 swapon --show 检查,应该能看到 /swapfile 一行。

三、开机自动挂载

上面的操作重启后会失效,需要写入 /etc/fstab:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

修改 fstab 之前建议先备份:sudo cp /etc/fstab /etc/fstab.bak。写错 fstab 可能导致系统启动异常,改完可以用 sudo findmnt --verify 做一次检查。

四、调优 swappiness

vm.swappiness 控制内核使用 Swap 的积极程度,取值 0~200(老内核为 0~100),Ubuntu 默认是 60。对于服务器,我们希望尽量用物理内存,只在真正紧张时才换出,通常调低到 10 左右:

cat /proc/sys/vm/swappiness        # 查看当前值
sudo sysctl vm.swappiness=10       # 立即生效
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swap.conf   # 永久生效

另一个可以顺带调整的参数是 vm.vfs_cache_pressure,它决定内核回收目录项和 inode 缓存的倾向,默认 100。设置为 50 可以让文件元数据缓存保留得更久,对频繁读取小文件的场景有帮助:

echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.d/99-swap.conf
sudo sysctl --system

五、观察效果

配置好之后,可以用下面的命令观察内存和交换的使用情况:

free -h
vmstat 5

vmstat 输出中的 si、so 两列分别表示每秒从 Swap 换入、换出的数据量。如果这两列长时间持续不为 0,说明机器在频繁换页,性能会明显下降,这时 Swap 只是“续命”,真正的解决办法是优化程序内存占用或升级内存规格。

想知道哪些进程用了 Swap,可以执行:

for f in /proc/[0-9]*/status; do awk '/^Name/{n=$2} /^VmSwap/{print $2, n}' "$f"; done 2>/dev/null | sort -rn | head

六、调整或删除 Swap

如果以后想改大小,先关闭再重建:

sudo swapoff /swapfile
sudo rm /swapfile

然后重新执行第二步即可。如果彻底不用了,记得把 /etc/fstab 中对应的一行删掉。

七、小结

  • Swap 不能代替内存,但能在内存短暂吃紧时避免进程被 OOM 直接杀掉,对 1~2G 的小规格云服务器很实用。
  • 推荐使用交换文件,大小灵活、不用重新分区。
  • 服务器场景把 swappiness 调低到 10 左右,兼顾稳定和性能。
  • 用 vmstat 关注 si/so,持续换页就该考虑优化程序或升级规格了。

按上面步骤操作大约五分钟,就能让小内存服务器在编译、装包、跑容器时稳定不少。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。