问题描述

我在训练模型的过程中,经常跑着中途发生了can not allocate memory的异常,从而使程序中断,其中发现是由于swap空间设置太小,导致交换内存溢出。因此本文介绍增加swap空间的方法。

查看当前系统的swap大小

1
free -m

m 是以兆为单位, g是以GB为单位, 默认是kb

如下图,当前系统只有1G的交换空间:

创建一个swap文件

swap交换空间其实就是硬盘上一个特定的文件,只不过这个文件只有内存在读写,比较大些。

1
2
3
4
5
mkdir /home/roo/swapfile

cd /home/roo/swapfile

sudo dd if=/dev/zero of=swap bs=1G count=61

mkdir /home/roo/swapfile 是先在/home/roo目录下创建了一个名为swapfile的文件夹
cd 进入swapfile文件夹, 然后创建一个大小为61G的,名为swap的空文件。

命令解释:

  • /home/roo/ 可以更换为自己的路径
  • bs为单位,默认为kb, 如设置为1024,则代表1M
  • count为数量,扩增大小为$count \times bs$

转换swap文件

将生成的文件转换成swap类型的文件

1
sudo mkswap -f swap

如下图:

激活swap文件

1
sudo swapon swap

卸载的话使用 swapoff

1
sudo swapoff swap

最后再次使用free查看,如下图:

永久生效

虽然交换空间到此已经扩展成功了,但是电脑重启的话,还是会恢复默认的swap大小。如果要一直使用这个swap,要把它写入/etc/fstab文件中。

编辑文件

1
sudo nano /etc/fstab

加入以下内容(路径根据自己设置的修改)

1
/home/roo/swapfile/swap none swap defaults 0 0

如下图:

推荐swap大小

以下列出Ubuntu系统根据RAM大小推荐设置的swap大小: