博文記錄
Debian 2020-04-05 14:45:40 90 0

在小内存机器上编译程序会导致gcc编译时因内存不足而被系统杀死。

不想通过apt或者yum的包管理安装程序,又想通过编译运行程序方便扩展和移植,此时可以通过创建swap虚拟内存的形式来执行编译。

不过缺点就是,用硬盘换换取的虚拟内存空间依赖于硬盘的性能,这会大大折扣编译速度。如非无奈之举,何尝如此行事。

 

经过测试在debian上编译PHP,峰值内存大概需要1.2G左右。所以我们只需要创建2G虚拟内存用于即可。

 

创建一块2G大小的文件

dd if=/dev/zero of=/swapfile bs=1M count=2048

将创建的文件转换为Linux交换分区

mkswap /swapfile

激活swap文件

swapon /swapfile

查看swap文件

swapon -s

结果参考:

Filename				Type		Size	Used	Priority
/swapfile                              	file    	2047996	246432	-1

 

如果你不想用了,也可以将swap分区关闭。

swapoff /swapfile

最后可以直接删除掉。

rm -rf /swapfile

 

如果你通过以上教程成功开启swap分区,但是编译时虚拟内存依然没有被使用

make时依然会被系统kill掉

此时你可以通过,修改系统使用swap优先级来改变。

编辑系统内核参数文件:/etc/sysctl.conf

增加或修改swappiness的值,swappiness的值越大,表示越积极使用swap分区,越小表示越积极使用物理内存。

vm.swappiness = 80

最后通过 sysctl -p 使其生效

如果配置完成后,虚拟内存依然没有被使用。你参考如下方式:
依然编辑内核参数文件:/etc/sysctl.conf ,添加以下选项。

vm.panic_on_oom = 2

panic_on_oom = 0 时开启内核oom保护机制,会杀掉超出资源消耗的进程。panic_on_oom = 1 时则会关闭此功能。

但是我自己这里是指0或1都没有什么用,无奈之举,设置为2之后。发现刚刚已经开启虚拟内存分区已经没了。

我重新激活分区之后,再尝试进行编译,发现此时虚拟内存已经被充分使用了。

此后,你可以将oom设置为0或者1,需要注意的是每次修改内核参数文件后,都需要通过执行 sysctl -p 使其生效。

 

發表評論
StudioEIM - 冒险者讲习所
0:00