Linux 服务器配置 Swap 空间,解决虚拟机内存不足问题
📌 背景
我的公网服务器是阿里云的轻量型,内存只有 1 GB,前段时间更新软件包的时候,DNF 软件包管理程序总是跑一半被 killed。我半天找不到原因,最后发现原来是内存不足。但是我又不想停机加内存,于是我尝试设置 Swap 交换空间,问题一下就解决了,可用内存也增加了好多。
Swap 在一定程度上确实可以缓解内存不足的问题,我建议服务器到手后,如果没有设置 Swap,先设置 Swap。
实验环境为一台 Debian 虚拟机,内存设置为 256MB,以模拟轻量级服务器内存紧张的情况。
🤔 Swap 的作用
Swap 是 Linux 系统中用于扩展物理内存的一种机制。当系统的物理内存(RAM)不足时,操作系统会将一部分不常用的内存数据转移到磁盘上的 Swap 空间中,从而释放物理内存供其他任务使用。
Swap 的主要作用包括:
- 缓解内存不足问题:当物理内存耗尽时,系统可以利用 Swap 空间继续运行,避免因内存不足导致程序崩溃。
- 支持休眠功能:在支持休眠的系统中,Swap 空间用于存储休眠状态下的内存数据。
- 优化内存管理:即使物理内存充足,Swap 也可以帮助操作系统更高效地管理内存资源,例如将长时间未使用的页面移至磁盘以腾出更多可用内存。
如果服务本身需要的内存大于目前可用的内存量,请增加物理内存,而不是想着能用 Swap 解决问题。
🛠️ 准备工作
在开始之前,请确保以下几点:
- 系统已更新至最新状态。
- Root 用户或者当前用户具有
sudo
权限。
📦 配置 Swap 空间
检查当前 Swap 状态
在配置 Swap 之前,先检查系统是否已有 Swap 空间:
1 | free -h |
我们来看一下实验机器的输出结果:
1 | total used free shared buff/cache available |
如果输出中 Swap
行显示为 0B
,则表示当前没有启用 Swap。
我们也可以看到,在 194 MB 的内存中,可用空间只有 35 MB,这已经非常紧张了。
规划 Swap 容量
到底建多大的 Swap,这个也没有什么标准答案,每个人有每个人自己的标准。事实上,只要不是太离谱(比如 1GB 内存配 16MB Swap),任何方案都是可行的。
以下是我自己的一个建议:
内存不大于 2GB(轻量级服务器、VPS):
- 最小容量:
RAM 容量 × 200%
- 最大容量:
RAM 容量 × 300%
- 示例:1GB 内存建议配置 2-3GB Swap
- 最小容量:
内存大于 2GB(一般情况):
- 推荐容量:
RAM 容量 × 100% ~ 150%
- 特殊需求:若需支持休眠功能,Swap 至少应等于 RAM 容量
- 示例:硬盘空间足够的情况下,8GB 内存建议配置 8GB Swap
- 推荐容量:
特殊场景:
- 高负载应用:建议保留 4GB 固定 Swap 空间
- 内存密集型任务:优先升级物理内存,而非增加 Swap
避免配置过小的 Swap(如小于 1GB):
- 可能导致内存溢出(OOM)时强制杀进程
- 无法有效缓冲突发内存需求
创建 Swap 文件
创建一个空文件作为 Swap 文件(例如 256MB):
1
sudo fallocate -l 256M /swapfile
如果
fallocate
命令没有找到,请检查是否已安装util-linux
包。对于fallocate
不可用的发行版,也可以使用dd
命令创建文件:1
sudo dd if=/dev/zero of=/swapfile bs=1M count=256
设置文件权限,确保只有 root 用户可以访问:
1
sudo chmod 600 /swapfile
将文件格式化为 Swap:
1
sudo mkswap /swapfile
此时会输出:
1
2Setting up swapspace version 1, size = 256 MiB (268431360 bytes)
no label, UUID=f59e4a69-f164-4cbe-bcf3-d771b9ca354a启用 Swap 文件:
1
sudo swapon /swapfile
验证 Swap 是否生效
再次运行以下命令检查 Swap 状态:
1 | free -m |
我们来看输出结果:
1 | total used free shared buff/cache available |
如果 Swap
行显示大于 0B
,则表示 Swap 已成功启用。
此时我们也可以看到,Swap 已经有使用,且可用内存明显增多。
🔧 永久启用 Swap
默认情况下,重启后 Swap 文件不会自动启用。为了永久启用,需要将其添加到 /etc/fstab
文件中:
编辑
/etc/fstab
文件,在末尾追加:1
/swapfile none swap defaults 0 0
验证
/etc/fstab
文件是否正确:1
sudo mount -a
如果没有报错,则表示配置无误。
如果条件允许,最好重启机器,以检查自动挂载是否生效。
📝 写在最后
通过配置 Swap 空间,我们可以有效缓解内存不足的问题,尤其是在内存极为紧张但磁盘空间充足的服务器场景中。
Swap 作为物理内存的扩展机制,能够帮助系统在内存压力下维持基本运行,避免程序异常中断。然而,这种解决方案并非没有代价——磁盘的读写速度远低于内存,过度依赖 Swap 会导致系统性能显著下降。
在实际运维中,建议将 Swap 视为应急缓冲方案而非长期替代方案。当发现服务器 Swap 使用率持续偏高时,应及时采取以下措施:
- 优化内存占用:检查是否存在内存泄漏或低效的程序配置
- 升级硬件配置:优先考虑增加物理内存或迁移至更高配置的实例
- 设置监控告警:通过
free
、vmstat
等工具监控内存/Swap 使用状态 - 合理规划容量:Swap 空间大小建议为内存的 200%-300%,但最大不宜超过 4GB
对于轻量级服务器用户,建议在系统初始化阶段即配置 Swap,这将为后续的软件安装、系统更新等操作提供更稳定的运行环境。记住,良好的运维实践应当是主动预防而非被动补救。
- 标题: Linux 服务器配置 Swap 空间,解决虚拟机内存不足问题
- 作者: GT610
- 创建于 : 2025-08-02 12:03:49
- 更新于 : 2025-09-23 15:09:18
- 链接: https://gt-610.dpdns.org/2025/08/02/linux-swap/
- 版权声明: 本文章采用 CC BY 4.0 进行许可。