在 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 可读写,防止安全风险。
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 等待的磁盘上,会拖慢整个实例。
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