跳到主要内容
← 指南列表

内存不足时——添加交换空间(Swap)

内存(RAM)不足时,程序会突然退出(Killed),或者服务器会变得像卡住一样缓慢。Swap 是将部分磁盘用作应急内存的功能,可以在内存暂时不足时防止程序被强制关闭。

Swap 比实际内存慢得多。如果内存总是不够,Swap 只是权宜之计,迁移到内存更大的套餐才是根本的解决办法。迁移到新服务器

1. 确认内存是否不足

free -h
  • 如果 Mem: 行的 available 值几乎为 0,说明内存不足。
  • 如果 Swap: 行全部为 0,说明没有 Swap。

程序是否因内存不足而被强制终止,可以用以下命令确认。

sudo dmesg | grep -i "out of memory"

如果有输出,说明曾有程序因内存不足(OOM)而被终止。

2. 创建 Swap 文件(Ubuntu、Debian)

以下是创建 2GB Swap 的示例。如果内存在 4GB 以下,设为与内存相同的大小;如果内存更大,2~4GB 就足够了。请先用 df -h 确认磁盘剩余空间是否充足。

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

再次执行 free -h 时,如果 Swap: 行显示 2.0Gi,即表示成功。

3. 设置为重启后仍然保留

按现在的状态,重启后 Swap 会关闭。请将其注册为开机时自动开启。

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

4. 调整为少用 Swap(可选)

默认设置下,即使内存还有剩余,也会使用相当多的 Swap。按如下方式修改后,只有在内存真正不足时才会使用 Swap。

echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system

如果想删除 Swap

sudo swapoff /swapfile
sudo rm /swapfile

然后用 sudo nano /etc/fstab 打开文件,删除以 /swapfile 开头的行并保存。

Windows 服务器呢?

Windows 默认以“分页文件”的名称设置了 Swap,无需另外创建。如果内存不足,请在任务管理器(Ctrl + Shift + Esc)→ 进程 标签页中查看占用内存较多的程序。更详细的排查方法请参考服务器变慢时的排查。

如果问题仍未解决,请在 Discord 提交工单。