Linux 创建 SWAP 交换分区

目录
[隐藏]

gcc 编译过程中报错提示 cc: Internal error: Killed (program cc1)。这基本上是因为内存不足的原因。可以临时修改交换分区来解决。

1 swap 交换分区的作用

当 Linux 系统的物理内存不够用时,可以将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到 SWAP 空间中,等到那些程序要运行时,再从 SWAP 中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行 SWAP 交换。这就是 SWAP 交换分区的作用。

系统在什么情况下才会使用 SWAP 呢?

实际上,并不是等所有的物理内存都消耗完毕之后,才去使用swap的空间,什么时候使用是由 swappiness 参数值控制的:

cat /proc/sys/vm/swappiness

该值默认值是 60

  • swappiness=0 的时候表示最大限度使用物理内存,然后才是 swap 空间。
  • swappiness=100 的时候表示积极的使用 swap 分区,并且把内存上的数据及时的搬运到 swap 空间里。

2 创建 swap 交换分区

请参考以下命令:

# 创建 swap 交换分区
# 这里的 64M 和 16 可以根据情况调整,乘积即为swap总体大小(1024M)。可执行 dd --help 查看详细的帮助信息
sudo dd if=/dev/zero of=/swapfile bs=64M count=16
# 设置权限,仅 root 用户可访问
sudo chmod 600 /swapfile
# 将 swapfile 文件标记为 swap 空间
sudo mkswap /swapfile
# 启用 swap 文件
sudo swapon /swapfile

查看交换分区信息:

# 验证,查看交换分区
sudo swapon --show
# 查看 swap 分区文件的容量
ls -lh /swapfile
# 查看正在活动的 swap
free -h

3 删除交换分区

如果只是用于临时扩容,以让 gcc 等程序可顺利编译,那么在编译完成后,可以取消交换分区,执行如下命令即可:

sudo swapoff /swapfile
sudo rm /swapfile

4 持久化化 swap 文件

通过上面的命令常见并启用了 swap 文件。但是如果系统重新启动服务器不会保留 swap 设置。可以通过将交换文件添加到的 /etc/fstab 来进行更改。

先备份 /etc/fstab 文件:

sudo cp /etc/fstab /etc/fstab.bak

执行如下命令,将 swap 文件信息添加到 /etc/fstab 文件末尾:

<br />echo "/swapfile  swap  swap    defaults 0 0" >> /etc/fstab
# echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

5 相关参考

  • https://www.cnblogs.com/hubery/p/4633863.html
  • https://blog.csdn.net/weixin_41846313/article/details/85199364
点赞 (0)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code