Linux 服务器配置 Swap 空间,解决虚拟机内存不足问题

GT610 Lv3

📌 背景

我的公网服务器是阿里云的轻量型,内存只有 1 GB,前段时间更新软件包的时候,DNF 软件包管理程序总是跑一半被 killed。我半天找不到原因,最后发现原来是内存不足。但是我又不想停机加内存,于是我尝试设置 Swap 交换空间,问题一下就解决了,可用内存也增加了好多。

Swap 在一定程度上确实可以缓解内存不足的问题,我建议服务器到手后,如果没有设置 Swap,先设置 Swap

实验环境为一台 Debian 虚拟机,内存设置为 256MB,以模拟轻量级服务器内存紧张的情况。

🤔 Swap 的作用

Swap 是 Linux 系统中用于扩展物理内存的一种机制。当系统的物理内存(RAM)不足时,操作系统会将一部分不常用的内存数据转移到磁盘上的 Swap 空间中,从而释放物理内存供其他任务使用。

Swap 的主要作用包括:

  1. 缓解内存不足问题:当物理内存耗尽时,系统可以利用 Swap 空间继续运行,避免因内存不足导致程序崩溃。
  2. 支持休眠功能:在支持休眠的系统中,Swap 空间用于存储休眠状态下的内存数据。
  3. 优化内存管理:即使物理内存充足,Swap 也可以帮助操作系统更高效地管理内存资源,例如将长时间未使用的页面移至磁盘以腾出更多可用内存。

如果服务本身需要的内存大于目前可用的内存量,请增加物理内存,而不是想着能用 Swap 解决问题。

🛠️ 准备工作

在开始之前,请确保以下几点:

  • 系统已更新至最新状态。
  • Root 用户或者当前用户具有 sudo 权限。

📦 配置 Swap 空间

检查当前 Swap 状态

在配置 Swap 之前,先检查系统是否已有 Swap 空间:

1
free -h

我们来看一下实验机器的输出结果:

1
2
3
               total        used        free      shared  buff/cache   available
Mem: 194Mi 85Mi 35Mi 556Ki 81Mi 108Mi
Swap: 0B 0B 0B

如果输出中 Swap 行显示为 0B,则表示当前没有启用 Swap。

我们也可以看到,在 194 MB 的内存中,可用空间只有 35 MB,这已经非常紧张了。

规划 Swap 容量

到底建多大的 Swap,这个也没有什么标准答案,每个人有每个人自己的标准。事实上,只要不是太离谱(比如 1GB 内存配 16MB Swap),任何方案都是可行的。

以下是我自己的一个建议:

  1. 内存不大于 2GB(轻量级服务器、VPS):

    • 最小容量:RAM 容量 × 200%
    • 最大容量:RAM 容量 × 300%
    • 示例:1GB 内存建议配置 2-3GB Swap
  2. 内存大于 2GB(一般情况):

    • 推荐容量:RAM 容量 × 100% ~ 150%
    • 特殊需求:若需支持休眠功能,Swap 至少应等于 RAM 容量
    • 示例:硬盘空间足够的情况下,8GB 内存建议配置 8GB Swap
  3. 特殊场景

    • 高负载应用:建议保留 4GB 固定 Swap 空间
    • 内存密集型任务:优先升级物理内存,而非增加 Swap

避免配置过小的 Swap(如小于 1GB):

  • 可能导致内存溢出(OOM)时强制杀进程
  • 无法有效缓冲突发内存需求

创建 Swap 文件

  1. 创建一个空文件作为 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
  2. 设置文件权限,确保只有 root 用户可以访问:

    1
    sudo chmod 600 /swapfile
  3. 将文件格式化为 Swap:

    1
    sudo mkswap /swapfile

    此时会输出:

    1
    2
    Setting up swapspace version 1, size = 256 MiB (268431360 bytes)
    no label, UUID=f59e4a69-f164-4cbe-bcf3-d771b9ca354a
  4. 启用 Swap 文件:

    1
    sudo swapon /swapfile

验证 Swap 是否生效

再次运行以下命令检查 Swap 状态:

1
free -m

我们来看输出结果:

1
2
3
               total        used        free      shared  buff/cache   available
Mem: 194Mi 78Mi 55Mi 56Ki 67Mi 115Mi
Swap: 255Mi 9.4Mi 246Mi

如果 Swap 行显示大于 0B,则表示 Swap 已成功启用。

此时我们也可以看到,Swap 已经有使用,且可用内存明显增多。

🔧 永久启用 Swap

默认情况下,重启后 Swap 文件不会自动启用。为了永久启用,需要将其添加到 /etc/fstab 文件中:

  1. 编辑 /etc/fstab 文件,在末尾追加:

    1
    /swapfile none swap defaults 0 0
  2. 验证 /etc/fstab 文件是否正确:

    1
    sudo mount -a

    如果没有报错,则表示配置无误。

    如果条件允许,最好重启机器,以检查自动挂载是否生效。

📝 写在最后

通过配置 Swap 空间,我们可以有效缓解内存不足的问题,尤其是在内存极为紧张但磁盘空间充足的服务器场景中。

Swap 作为物理内存的扩展机制,能够帮助系统在内存压力下维持基本运行,避免程序异常中断。然而,这种解决方案并非没有代价——磁盘的读写速度远低于内存,过度依赖 Swap 会导致系统性能显著下降。

在实际运维中,建议将 Swap 视为应急缓冲方案而非长期替代方案。当发现服务器 Swap 使用率持续偏高时,应及时采取以下措施:

  1. 优化内存占用:检查是否存在内存泄漏或低效的程序配置
  2. 升级硬件配置:优先考虑增加物理内存或迁移至更高配置的实例
  3. 设置监控告警:通过 freevmstat 等工具监控内存/Swap 使用状态
  4. 合理规划容量: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 进行许可。
评论