2G 内存跑 5 个容器频频 OOM?一招 Swap 抢救你的 2核2G 小破服务器

📖 背景 我的云服务器是可怜的 2核2G 配置。上面挤着 MariaDB、2 个 Flask 后端、Adminer 和 Uptime Kuma。平时跑着还行,但我只要一跑备份脚本,或者有大并发访问大屏,SSH 终端突然就卡死,随后所有容器全部挂掉。

🔍 原因 小学生版解释:你的物理内存是 2 平米的仓库。现在住了 5 个租客(容器),每人占一点,仓库刚好塞满。这时候备份脚本(另一个租客)也想进来,仓库塞不下了,房东(Linux 系统)一看急眼了,直接把一个正在干活的租客扔出去(OOM Killer,Out of Memory),导致服务崩溃。

查系统日志:dmesg | grep -i oom,果然看到了 Killed process (mysqld)。

🛠 解决 物理内存不够,只能找"外援"------配置 Swap(虚拟内存)。相当于在硬盘上划出一块地,当仓库溢出时,把不常用的东西临时扔到硬盘上。

bash 复制代码
# 1. 创建 2G 大小的 Swap 文件
sudo fallocate -l 2G /swapfile
# 2. 设置只有 root 能读写
sudo chmod 600 /swapfile
# 3. 格式化为 Swap 类型
sudo mkswap /swapfile
# 4. 启用它
sudo swapon /swapfile
# 5. 写入 fstab 保证重启后自动挂载
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# 6. 调优 swappiness (默认60,调低到10,尽量用物理内存,实在不够再用 Swap)
sudo sysctl vm.swappiness=10

✅ 验证效果 执行 free -h,能看到 Swap 那一行有了 2.0Gi。再次跑备份脚本,系统不卡了,用 vmstat 1 看,si 和 so(Swap 换入换出率)保持在 0 或者个位数,说明物理内存稳住了。

💣 三个坑 把 swappiness 设成 0:很多人以为设成 0 就是不使用 Swap,其实在 Linux 里设为 0 往往会导致系统在极端情况下直接 OOM,保留 10 左右最好。

忘记 chmod 600:如果不设权限,系统会出于安全考虑拒绝启用。

把 Swap 放在机械硬盘上:虽然我们云服务器大概率是云盘,但如果是本地机械盘,Swap 过于频繁会导致系统巨卡,Swap 只是救命药,不是健胃消食片。

相关推荐
jose1 小时前
存量 Eureka 平滑接入 Nacos:内嵌 Sync 与双注册 SDK 双路线对比
后端·架构
lazy H2 小时前
【计算机网络】第 2 篇:一条数据如何穿过网络?彻底理解数据封装与解封装
网络·经验分享·后端·学习·计算机网络
我命由我123452 小时前
软件工程概念 - 可插拔性
java·后端·学习·java-ee·系统架构·软件工程·学习方法
Bazingga2 小时前
RAG路由全景:一个问题走到岔路口,谁来指路
后端
云边有个稻草人2 小时前
从日志到落库:数据集成产品 KFS 如何打通异构数据库实时同步链路
后端
努力小陈12 小时前
从 Java 到 Go:后端工程师的 30 分钟语法速查
后端
Thneonl2 小时前
一个 502,十种病因:nginx 反代排障分诊树
后端·架构
花间相见2 小时前
【计算基础|MySQL09】索引(下):失效与设计
数据库·后端·面试
南丘山2 小时前
接口自动化测试从零搭:31 条用例跑 4 秒,抓出 6 个权限缺陷
后端