CentOS 7 创建 Swap 空间

npm install 的过程中,突然报错:

1
Killed         ....] / extract:webpack-dev-middleware: sill doParallel extract 1609

针对这个问题,StackOverflow 用户 enRaiser 指出,可能是 Swap 空间不足引起1

查看当前 Swap 信息

使用 swapon -s 命令可以查看当前系统中的 swap 情况。如果返回为空,那么就是不存在 swap 文件。

也可以使用 free -h 查看当前系统中的 swap 使用情况:

1
2
3
4
[[email protected]]# free -h
total used free shared buff/cache available
Mem: 991M 216M 647M 620K 126M 633M
Swap: 0B 0B 0B

创建 Swap

使用 fallocate 可以很方便地预分配一片空间,创建 swap 文件。例如在根目录(也就是 / 目录)创建一个 2G 大小,且文件名为 swapfile 的 swap 文件:

1
falocate -l 2G /swapfile

使用 ls -lh /swapfile 查看刚创建的 swap 文件:

1
-rw-r--r-- 1 root root 2.0G Jul 21 16:24 /swapfile

生效 Swap

虽然 swap 文件已经成功创建,但是发现,其权限是 -rw-r--r--,也就意味着非 root 权限的用户也能读取,因此记得改一下权限:

1
chmod 600 /swapfile

现在,使用 mkswap 就可以让 swapfile 作为系统的 swap 空间来使用:

1
mkswap /swapfile

验证 Swap

使用 swapon -s 来验证刚刚创建的 swap 文件:

1
2
3
[[email protected]]# swapon -s
Filename Type Size Used Priority
/swapfile file 2097148 0 -2

或者通过 free -h 来查看:

1
2
3
4
[[email protected]]# free -h
total used free shared buff/cache available
Mem: 991M 218M 598M 620K 174M 620M
Swap: 2.0G 0B 2.0G

包括在 htop 等应用中,也可以查看到刚创建的 swap 空间。

让 Swap 文件永久生效

刚刚创建的 swap 文件只在当前有效。系统重启之后,swapfile 不会自动生效。

因此,如果想让 swap 文件永久有效,那就需要修改 /etc 下的 fstab 文件,在最后一行加上:

1
/swapfile	swap	swap	sw	0	0

系统会在每次启动后检查这个文件,让 swapfile 生效,当作 swap 空间来使用。

OK,继续 npm install

参考链接

[1] StackOverflow, npm install always stuck at that extract:time-grunt

[2] DigitalOcean, How To Add Swap on CentOS 7