在一次编译 VSCode 的项目中,跨越千山万水,解决重重依赖后,终于来到了编译环节。然而才开始没多久,就出现了一个匪夷所思的报错。

谷歌一番,又到 /var/log/message 里查看了一番系统日志,竟然说是内存爆满,进程被 kill 了。想来我阿里云的那台服务器内存的统计曲线基本就没超过一半,今儿个怎么会出现内存爆掉的情况。又是一顿折腾发现这台阿里云的机子 Swap 大小竟然为 0??Swap 为物理内存达到一定临界值之后,系统将磁盘的一部分空间作内存使用,一般在 Windows 系统上都是由系统自动管控,新安装的 Linux 桌面发行版也会在安装时提醒用户设置,这坑爹的阿里云在安装的时候没给我分配 Swap 分区?

吐槽归吐槽,问题还是要自己解决。网上各种 swap 分区的设置教程大部分都比较模糊,代码的参数及命令都没有解释清楚,给人一种看不懂的感觉~对于操作磁盘这种敏感操作,还是要尽量避免在半懂不懂的情况下进行这种高危操作,毕竟数据无价嘛。最后找到了一篇靠谱的教程,并在服务器端和树莓派端进行实践。

参考:https://linux.cn/article-9238-1.html

使用 fallocate 创建交换空间,我们首先在 / 目录下创建一个名为 swap_space 的文件。然后分配 4GB 到 swap_space 文件:

fallocate -l 4G /swap_space

我们运行下面命令来验证文件大小:

ls -lh /swap_space

然后更改文件权限,让 /swap_space 更安全:

chmod 600 /swap_space

这样只有 root 可以读写该文件了。我们再来格式化交换分区(LCTT 译注:虽然这个 swap_space 是个文件,但是我们把它当成是分区来挂载):

mkswap /swap_space

然后启用交换空间:

swapon -s

每次重启后都要重新挂载磁盘分区。因此为了使之持久化,就像上面一样,我们编辑 /etc/fstab 并输入下面行:

/swap_space swap swap defaults 0 0

保存并退出文件。现在我们的交换分区会一直被挂载了。我们重启后可以在终端运行 free -m来检查交换分区是否生效。

修改后 Swap 分区大小变为 4G,编译终于可以跑起来了~