如何在 DigitalOcean Droplet 上配置 Swap 虚拟内存防止 OOM

文章导读
在 DigitalOcean Droplet 上创建 Swap 文件是缓解内存不足导致进程被杀的有效手段,特别适合内存小于 2GB 的实例。需注意 Swap 基于磁盘读写,频繁使用会显著增加 I/O 等待,不适合高数据库负载场景。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

在 DigitalOcean Droplet 上创建 Swap 文件是缓解内存不足导致进程被杀的有效手段,特别适合内存小于 2GB 的实例。需注意 Swap 基于磁盘读写,频繁使用会显著增加 I/O 等待,不适合高数据库负载场景。

先说结论:配置 Swap 是低成本防止 OOM 的止血方案,但不能替代升级内存。

  • 适合:内存小于 2GB 且偶尔出现内存峰值的轻量应用
  • 先准备:确认磁盘空间充足并备份重要数据
  • 验收:使用 free 命令确认 Swap 状态为 active

命令速用版

sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

为什么会这样

Linux 内核在物理内存耗尽时会触发 OOM Killer 强制终止进程,Swap 将部分不活跃内存页移至磁盘以释放物理内存。这能避免服务意外中断,但磁盘读写速度远低于 RAM,频繁交换会导致系统响应变慢。

分步处理

1. 检查现有 Swap:运行 swapon `--show`,若已有配置可跳过。

2. 创建文件:使用 fallocate 快速分配空间,若报错则改用 dd 命令。

3. 设置权限:chmod 600 确保只有 root 可读写,防止安全风险。

如何在 DigitalOcean Droplet 上配置 Swap 虚拟内存防止 OOM

4. 启用 Swap:执行 mkswap 初始化并 swapon 激活。

5. 持久化:写入 /etc/fstab 防止重启后失效,需确保语法正确。

怎么验证是否生效

执行 free -h 查看 Swap 行 Total 列是否有数值,且 Used 列随负载变化。检查 swapon `--show` 输出中 TYPE 为 file 且 USED 不为空。观察 dmesg 日志确认无新的 OOM kill 记录。

常见坑

1. fstab 配置错误会导致系统无法启动,修改前建议备份 /etc/fstab。

2. 不要将 Swap 放在机械硬盘或高 I/O 等待的磁盘上,会拖慢整个实例。

如何在 DigitalOcean Droplet 上配置 Swap 虚拟内存防止 OOM

3. Swap 不能解决代码内存泄漏问题,长期占用过高仍需优化应用或升级配置。

常见问题

配置 Swap 会影响服务器性能吗?

会,当物理内存不足频繁使用 Swap 时,磁盘 I/O 等待升高会导致应用响应变慢。

4GB 内存的 Droplet 需要配置 Swap 吗?

通常不需要,除非运行 Java 等内存消耗大且偶尔峰值的应用。

如何永久关闭 Swap?

执行 swapoff /swapfile 并从 /etc/fstab 删除对应行,然后删除文件。

参考来源

DigitalOcean Community: How To Add Swap Space on Ubuntu 20.04 - https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04