2核2G的云服务器总卡死?加内存前,先花5分钟开个 Swap
前两年我买过一台 99 块一年的 2核2G 小服务器,就挂在上面跑 WordPress。
平时好好的,偶尔莫名其妙就 502,过一会儿自己又好了。翻日志查到 Out of memory 那一行,才知道是被内核直接砍了进程。
当时我的第一反应是"内存不够,加钱升级"。后来有人提醒我一句:你这机器 Swap 开着没?
我一查,swapon --show 是空的。系统装完就没给你开。
开完之后,那台机器又安安稳稳跑了大半年,中间还是 99 块续的费。
所以今天把这事从头讲一遍:Swap 到底该不该开,怎么开,以及哪些人劝你别开。
Swap 是个啥
Linux 会用硬盘上的一块空间,来假装自己还有内存。
物理内存不够用了,系统就把一些"暂时不动"的内存页挪到硬盘上,把 RAM 腾给正在干活的程序。
一句话:Swap 是内存的后备箱,不是内存本身。
这个区别很重要,后面聊坑的时候还会回来。
![]()
开 Swap 的三个实在好处
1. 防的不只是"慢",还有"死"
内存真不够的时候,没有 Swap 的机器会直接触发 OOM Killer——内核自己动手,把你的进程一枪毙掉。表现出来就是网站瞬间 502,你连救的机会都没有。
有 Swap 的话,系统会先"喘一口气",把不常用的页挪出去顶着,给你留出排查的时间。
慢一点,和直接死掉,是两码事。
2. 挡住"假性内存不足"
这个坑挺阴的。像 Java、Node.js 这类程序,启动时会先申请一大块虚拟内存,虽然实际用不了那么多,但系统要是预留不出来,它就直接启动失败。
你明明看 free -h 还有空闲内存,服务就是起不来。给个 Swap 兜底就顺了。
3. 成本基本等于零
Swap 用的是系统盘的空间。你那个 40G 的系统盘,可能用了不到 10G,剩下 30G 白放着。
从里面划 1~2G 出来,几乎不花什么成本——反正这个价位的机器本来就是按整台计费的。
那为什么有人说"千万别开"
这话不是没道理,主要是三点。
硬盘真的比内存慢太多。 内存是 GB/s 级别,SSD 云盘顺序写也就 100~200MB/s,随机读写更差。一旦系统频繁往 Swap 上倒腾数据,你会明显感觉到卡,SSH 敲个命令都一顿一顿的。
有些机型根本不让你开。 部分轻量服务器和抢占式实例,出于性能隔离的考虑默认禁掉了 Swap。你强行开,可能表面开了、实际不生效,或者过一会儿被系统自己关掉。
最怕的是拿它掩盖问题。 服务卡,你去开 Swap;卡的原因其实是代码内存泄漏、数据库没调优、插件堆太多。Swap 一开,卡感变轻了,真正的问题反而被藏起来了。
治标不治本,拖久了更难受。
谁建已开
建议开:
• 内存 ≤2G 的入门机,比如 2核2G 跑 WordPress
• 开发测试环境,跑 Docker、编译代码这种偶尔吃内存的活儿
• 你还没摸清自己的程序到底要吃多少内存
别指望它救场:
• 高并发生产环境,比如电商、API 网关——该加内存就加内存
• 大内存的 NVMe 实例,开 Swap 纯属占地方
• 磁盘 I/O 本来就是瓶颈的机器,再加 Swap 是雪上加霜
一句话:Swap 适合救急,不适合扛活。
5 分钟开一个 2G Swap
Ubuntu / CentOS 都能用,逐行复制就行:
# 创建 2GB 的 Swap 文件
sudo fallocate -l 2G /swapfile
# 设置权限(必须是 600,别人不该读到这块空间)
sudo chmod 600 /swapfile
# 格式化成 Swap
sudo mkswap /swapfile
# 启用
sudo swapon /swapfile# 写入 fstab,重启后自动生效
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
完事验证一下:
swapon --show
free -h看到 Swap 那一行有数字,就成了。
但这里有个原文没交代的前提,我要单独拎出来说:
上面第一条 fallocate 命令,在 ext4、XFS 上一般没问题,但 btrfs 文件系统明确不支持这样创建 swapfile,强行来有可能把文件系统搞出问题。
如果你不确定自己的根分区是什么格式,跑一下 df -T /。看到 btrfs,就把第一条换成:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress慢一点,但稳。
另外,如果是 RHEL / CentOS 系并且开着 SELinux,加一步:
sudo restorecon -v /swapfile不然可能重启之后 Swap 起不来。
三个容易踩的坑 坑一:以为开了 Swap 就等于扩容内存
不是。Swap 只是把"死亡时间"往后推,它不给你加内存。
看 free -h,如果 Swap 使用率长期超过 50%,说明这台机器是真的该升级了,别再指望它。
坑二:小内存机器上开一个巨大的 Swap
2G 内存配 4G Swap,听着很安全,实际上系统一旦开始频繁交换,会卡到几乎没法用。
小内存机器的正确姿势是:小 Swap(1~2G)+ 监控告警 + 老实优化程序。
坑三:装完就不管 swappiness
Linux 默认 vm.swappiness=60,意思是"挺早就开始用 Swap"。对跑网站的机器来说太积极了,本该留在内存里的热数据也被挪走了。
调低一点:
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf顺便纠一个流传很广的说法:别设成 0。内核 3.5 之后,swappiness=0 不是"尽量少用",而是"除非内存告急否则完全不用",结果反而更容易撞上 OOM。服务器设 1 比设 0 稳当。
至于调到多少合适,大致分档:数据库类 110,应用服务器 1030,普通网站 10~20,够用了。
zram 可能比 Swap 更香
这块是我想额外补的,因为这几年情况变了。
![]()
传统的 Swap 是往硬盘上写,慢。而 zram 是在内存里做一块压缩过的块设备——数据不出内存,只是被压缩了。
用 zstd 压缩,大致能压到 3:1。也就是说划出来 1G 的 zram,实际能装进两三个 G 的内容。延迟是微秒级,而且完全不碰硬盘,没有写入磨损。
对你那台 2核2G 的小机器来说,这往往比传统 Swap 更划算。
现在 Fedora、Pop!_OS 这类发行版已经默认给开了。Ubuntu 上装一下就有:
sudo apt install zram-tools装完重启,zramctl 能看到设备就说明生效了。
那什么时候还是得靠传统 Swap?大概是这几种:内存大到几十 G、要休眠、或者数据本身已经压缩过(图片、视频这种,压不动)。这时候 zram 帮不上什么忙,直接用硬盘 Swap 更简单。
两者也能一起用:zram 当第一层,磁盘 Swap 兜底。
星哥的云上小店
上面说的 99 元 2核2G 活动机,走官方渠道就能买,我这边放了两个入口:
• 阿里云:
y.xgss.net/a• 腾讯云:
y.xgss.net/tx
复制这一段粘贴到浏览器地址栏打开就行(微信里点了跳不过去)。走这个入口价格跟你自己上官网买是一样的,不会多花一分钱,算是顺手支持一下我继续折腾。
买之前先看清楚配置和地域,2核2G 拿来练手、跑博客绰绰有余,真上生产还是老老实实加内存。
最后
Swap 这个东西,你指望它提升性能,它会让你失望。
但它能让你在服务快要崩的那一刻,多出半小时去查日志,而不是半夜被用户的投诉电话叫醒。
装完 Swap,记得配个内存和 Swap 使用率的告警。告警不响,说明你的机器配置是够的;告警一响,那就是真该加内存了。
一句话收尾:它不是让机器变快的药,是防止你摔死的安全网。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.