服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-09-04 更新于 2026-09-04 简米科技 3,371 字 8 分钟阅读

云服务器里的Swap交换分区到底需不需要开启,Swap分区怎么设置大小最合适?

导读云服务器里的 Swap 交换分区到底需不需要开启?结论是:绝大多数云服务器场景下,不建议盲目开启,但内存较小的突发型实例或特定数据库服务可以按需配置,核心取决于你的业务内存压力模型,为什么云服务器对 Swap 的态度和物理机不一样传统物理机时代,内存不够了,Swap 能救急,但云服务器是虚拟化环境,宿主机和邻居……

云服务器里的 Swap 交换分区到底需不需要开启?结论是:绝大多数云服务器场景下,不建议盲目开启,但内存较小的突发型实例或特定数据库服务可以按需配置,核心取决于你的业务内存压力模型。

为什么云服务器对 Swap 的态度和物理机不一样

传统物理机时代,内存不够了,Swap 能救急,但云服务器是虚拟化环境,宿主机和邻居实例共享物理资源,Swap 的行为会被放大影响,业内专家指出,云厂商通常会限制或警告使用 Swap,原因很直接。

云盘 IO 性能撑不住 Swap 的随机读写

Swap 的本质是把内存里暂时不用的数据挪到磁盘,物理机用本地 SAS 或 NVMe 盘,IO 延迟勉强能看,但云服务器的系统盘和数据盘多是网络分布式存储,比如简米云的 ESSD、酷番云的 CBS,虽然顺序读写快,但随机小文件 IO 的延迟和吞吐远不如本地盘,当 Swap 频繁换页时,每次内存访问都可能变成一次云盘随机读写,延迟从纳秒级跳到毫秒级,整个应用会卡成幻灯片。

宿主机内存超卖加剧了 Swap 的负面效应

云厂商为了利用率,会在宿主机上做内存超卖,你的云服务器实例如果长时间大量使用 Swap,相当于在宿主机层面制造额外 IO 压力,可能影响同物理机上的其他租户,很多云平台在监控到实例 swap 使用率过高时,会触发限流甚至强制重启,这类案例在开发者社区里并不少见。

大多数云业务是网络 IO 密集型,Swap 帮倒忙

网站、API 服务、小程序后端,这类业务的缓存命中率远高于内存换页需求,它们需要的是快速响应,一旦内存不足,正确做法是让进程 OOM 崩溃后重启,而不是让整个服务陷入换页泥潭。OOM 是瞬间的事,重启后服务恢复;而 Swap 会让服务持续卡顿几十分钟,业务损失更大。

什么情况下 Swap 确实需要开:场景决定论

云服务器里的Swap交换分区到底需不需要开启,Swap分区怎么设置大小最合适?

不是所有云服务器都不能开 Swap,以下几类情况开了反而更好。

内存 1G 以下的轻量云服务器跑 Docker 或 Node.js

酷番云轻量应用服务器、简米云轻量应用服务器偶尔有 1G 内存的低配型号,这类机器跑 Docker 容器时,基础进程就吃掉了 60% 内存,Node.js 应用默认堆内存限制在 2G 左右,但实际使用经常触顶,此时配一个 1G-2G 的 Swap,可以避免容器被 OOM killer 误杀,这类场景的特点是单实例负载低,并发小,换页频率极低,Swap 只是兜底。

数据库服务器在突发流量高峰时的临时缓冲

MySQL 或 Redis 跑在 4G 内存的云服务器上,平时内存足够,但活动大促或爬虫突发时,临时查询会话可能瞬间占满内存,开一个大小等于内存 50% 的 Swap,能让数据库在高峰期间不至于直接崩溃,而是以牺牲部分查询速度换取服务存活。注意,这只是权宜之计,业务长期超过内存水位,该升配还是得升配。

本地盘实例更适合开 Swap

如果你买的是老一代本地盘云服务器,比如简米云本地 SSD 实例、AWS 的存储优化型实例,它们的 IO 延迟远低于网络云盘,Swap 的实际体验接近物理机,这类实例可以放心开启,但还是建议把 swappiness 调低,具体方法下面会讲。

Swap 的开启方式与核心参数配置

如果你决定开启,那么具体操作路径如下。

Linux 系统下创建 Swap 文件的标准流程

以 Ubuntu 22.04 或 CentOS 7 为例,推荐使用 Swap 文件而非独立分区,原因是弹性扩容方便。

sudo fallocate -l 2G /swapfile   # 创建2G文件,若失败则用 dd if=/dev/zero of=/swapfile bs=1M count=2048
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

持久化配置:编辑 /etc/fstab,加入一行:

/swapfile none swap sw 0 0

云服务器里的Swap交换分区到底需不需要开启,Swap分区怎么设置大小最合适?

检查是否生效:free -hswapon --show

swappiness 参数:决定换页的激进程度

/proc/sys/vm/swappiness 默认是 60,表示内存使用超过 40% 时就开始考虑换页,云服务器上建议设为 10 或更低。

临时生效:sudo sysctl vm.swappiness=10

永久生效:在 /etc/sysctl.conf 中加入 vm.swappiness = 10

行业共识认为,设置 10 能让内核仅在内存极紧张时才动用 Swap,避免日常误用。

云服务器内存监控的最佳实践

不监控就乱开 Swap,等于埋雷,推荐使用 sar -S 查看 swap 使用率和换页速率,重点监控 pswpin/spswpout/s,这两个值长期高于 10 就说明 Swap 已经影响性能了,也可以用 vmstat 1 观察 siso 列,云平台自带的监控面板也可以加一个 Swap 使用率指标,配合阈值告警。

不开启 Swap 时,如何避免 OOM 崩溃

不开启 Swap,不代表对内存放任不管。

调整 OOM 策略,保护关键进程

/proc/[pid]/oom_score_adj 可以手动调整进程被杀死的优先级,比如你的 Nginx 进程不想被误杀,就写一个小的负数,对于 MySQL,可以设置 innodb_buffer_pool_size 让它别吃太多内存,而不是指望 OOM 救场。

借助 systemd 和容器化限制内存上限

用 systemd 启动的服务,可以通过 MemoryMax= 参数限制内存使用,Docker 容器则用 -m 512m 限制内存,配合 --memory-swap 禁用 swap 使用,这样即使进程申请内存超过限制,也会被内核拒绝而不是触发全局 OOM。

应用层缓存优化是根治之道

很多云服务器内存不够用的根因是应用没有合理利用缓存,PHP 的 OPcache、Java 的堆内存参数、Python 的

云服务器里的Swap交换分区到底需不需要开启,Swap分区怎么设置大小最合适?

PYTHONMALLOC 环境变量,调整后可能节省 30% 内存。调整应用比调整 Swap 更有效。

云服务器 Swap 配置的典型误区

第一类误区:认为 Swap 越大越好,Swap 过大,内核可能频繁把不常用的内存页写盘,然后在需要时又读回来,导致 IO 负载高企,磁盘寿命也受影响,第二类误区:云控制台里看到 Swap 使用率高就慌了,有些系统默认开启了 zram 或 zswap,这些是内存压缩技术,不占用磁盘 IO,别误判为磁盘 Swap,第三类误区:用命令行直接关闭 Swap 不修改 fstab,重启后 Swap 又回来了,误导排障。

云服务器 Swap 常见问题快速解答

云服务器内存 2G 但开了 MySQL 8.0,应该怎么设置 Swap 大小?

建议创建 1G 的 Swap,同时将 MySQL 的 performance_schema 关闭,innodb_buffer_pool_size 设置为 512M,Swap 使用率经常超过 50%,说明内存缺口太大,应该直接升级到 4G 内存,而不是继续加大 Swap。

酷番云轻量服务器和简米云轻量服务器在 Swap 上的默认配置有区别吗?

据酷番云官方文档统计,大部分轻量应用服务器系统镜像默认不开启 Swap,简米云轻量服务器同样如此,如果你在这两家平台购买后遇到内存告警,检查 /etc/default/grub 中的 GRUB_CMDLINE_LINUX 是否包含 swapaccount=0,这会限制 swap 统计能力,需要手动调整。

能不能把 Swap 放在云服务器的数据盘而不是系统盘?

可以,但要注意数据盘通常也是网络云盘,IO 性能差异不大,如果数据盘是独立挂载的高性能云盘,ESSD PL1 以上,放在数据盘确实能减少系统盘的读写竞争,挂载时记得在 /etc/fstab 中使用 UUID 而不是设备名,避免重启后盘符变化导致 swap 挂载失败。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱