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