内存告急先别急着加配置:给云服务器配一份 swap 救急

举报
yd_260072176 发表于 2026/11/05 23:02:01 2026/11/05
【摘要】 内存告急先别急着加配置:给云服务器配一份 swap 救急1 核 2G 的小鸡跑个编译、起两个容器,动不动进程被系统"杀掉",dmesg 里躺着一行 Out of memory: Killed process。先别急着升配置——多数云厂商的默认镜像根本没开 swap,加一份 swap 文件,几分钟就能让这种"内存毛刺"场景稳下来。 先看清现状:到底缺不缺free -h ...

内存告急先别急着加配置:给云服务器配一份 swap 救急

1 核 2G 的小鸡跑个编译、起两个容器,动不动进程被系统"杀掉",dmesg 里躺着一行 Out of memory: Killed process。先别急着升配置——多数云厂商的默认镜像根本没开 swap,加一份 swap 文件,几分钟就能让这种"内存毛刺"场景稳下来。

先看清现状:到底缺不缺

free -h            # 看 Mem 和 Swap 两行
swapon --show      # 有输出才说明 swap 生效中
dmesg | grep -i "out of memory"   # 确认之前是不是被 OOM killer 干掉的

如果 Swap 那行全是 0,而 OOM killer 确实杀过进程,那 swap 就是对症的药。注意:swap 治的是"偶发毛刺",不是"常态不够"——后面会讲边界。

四步配好 swap 文件

以 2G 内存的机器加 2G swap 为例(swap 大小一般取内存的 0.5~1 倍):

# 1. 创建 2G 的空文件
sudo fallocate -l 2G /swapfile

# 2. 权限必须 600,否则 swapon 直接拒绝
sudo chmod 600 /swapfile

# 3. 格式化成 swap 区并启用
sudo mkswap /swapfile
sudo swapon /swapfile

# 4. 验证
free -h

真实踩坑:fallocate 在某些文件系统上会翻车

在 btrfs(部分云镜像默认用它)上,fallocate 打出来的文件带"空洞",swapon 会报错 swapon failed: Invalid argument 或提示 swap file has holes。别跟它较劲,换 dd 老实写满:

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

慢一点,但哪都行得通。配完记得重做 chmod 600 和 mkswap。

重启不丢:写进 fstab

只 swapon 的话重启就没了,加一行持久化:

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

写完先别急着重启验证——用 sudo swapoff -a && sudo swapon -a 走一遍 fstab 的逻辑,没报错才算数。fstab 写错一行,机器可能开不了机,这一步值得多花 10 秒。

swappiness:让系统别太"恋战"内存

cat /proc/sys/vm/swappiness   # 默认一般是 60

这个值决定内核多积极地把不活跃内存页换到 swap。云服务器上建议调低一点(比如 10),让 swap 真正只在救急时上场:

# 临时生效
sudo sysctl -w vm.swappiness=10
# 永久生效
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

边界:什么时候 swap 救不了你

  • vmstat 1 里 si/so(换入/换出)长期大于 0,说明系统一直在靠 swap 续命——这时该升内存,不是加 swap。
  • 云盘 IO 本来就慢,重度 swap 会让整机卡成 PPT,这种场景加 swap 只是把"被杀"换成"卡死"。
  • 不要拿 swap 容量去规划应用内存:Java 堆、数据库 buffer pool 这些常驻内存,该给物理内存还是得给。

一句话总结

fallocate(不行换 dd)→ chmod 600 → mkswap → swapon → 写 fstab → 按需调 swappiness。2G 小鸡的 OOM 毛刺,多数到这一步就安静了。真到了 si/so 常年不为零的那天,再大大方方去升配置——那是业务在增长,不是你在浪费钱。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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