服务公告
swap 交换分区要不要开:小内存机器的取舍
发布时间:2026-10-10 09:39
## 两个选项 swap 的选择本质上二选一:不开,换取纯粹的性能与行为确定性;开一个适度的大小,换取内存吃紧时的缓冲时间。云服务器的默认镜像多数不带 swap,需要自己补,交换文件方式最灵活,随时可以调整大小: ```bash fallocate -l 2G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile ``` 开机自动生效需在 /etc/fstab 追加一行:/swapfile none swap sw 0 0。swappiness 参数决定内核的积极性,取值 0 到 100,越高越积极把内存页挪进 swap,查看与修改分别是 cat 与 sysctl vm.swappiness=10,临时改完即时生效,永久生效需写入 /etc/sysctl.conf 再执行 sysctl -p。 ## 各自的适用面 内存宽裕、跑延迟敏感型常驻服务的机器,比如独立的数据库实例,swap 换页会造成肉眼可见的抖动,一次换页风暴能把查询延迟拉高一个数量级,这类机器倾向不开 swap,或者开了也把 swappiness 压到 10 以下仅作极端兜底。 小内存机器则是另一番处境。以 1G 内存的入门配置跑个小站为例,编译安装、打包备份这类瞬时大内存任务很容易把内存顶穿,内核的 OOM 机制会直接杀掉进程,服务半夜无声消失。这种情况下开 1 到 2G 的 swap 是划算的保险:常驻内存不够时忍一点换页的慢,换的是缓冲时间与存活率,总比进程被杀强。代价要认清楚——swap 是缓冲不是容量,长期频繁换页说明内存真的不够了。 ## 选择建议 务实的路线:内存 2G 以下默认开 swap,大小取内存的一到两倍;内存充裕且跑数据库的机器可以不开。判断现状看两个数:free 命令里 swap 的 used 长期为零,说明开了也没用上;vmstat 的 si so 持续非零,说明已经在换页,该加内存了。在顺云控制台把内存使用率告警配好,告警触发先区分缓存与真实占用,再决定排查泄漏还是升配,swap 只负责争取处置时间。内存 4G 以上的机器,swap 更像保险丝,配 2G 足够,把预算留给监控告警更划算。开多大也要看磁盘类型与空间余量,机械盘换页的代价远高于固态盘,云盘做 swap 还要留意额外的 IO 消耗。下一篇: 数据导出指引发布