小内存机器通过提高 s wa p 空间来编译程序

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

不想通过 a p t 或者 y u m 的包管理安装程序,又想通过编译运行程序方便扩展和移植,此时可以通过创建 s wa p 虚拟内存的形式来执行编译。

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

经过测试在 d ebia n 上编译 P HP,峰值内存大概需要 1 .2 G 左右。所以我们只需要创建 2 G 虚拟内存用于即可。

创建一块 2 G 大小的文件

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

将创建的文件转换为 L inu x 交换分区

mkswap /swapfile

激活 s wa p 文件

swapon /swapfile

查看 s wa p 文件

swapon -s

结果参考:

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

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

swapoff /swapfile

最后可以直接删除掉。

rm -rf /swapfile

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

mak e 时依然会被系统 k il l 掉

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

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

增加或修改 s wappines s 的值,swappines s 的值越大,表示越积极使用 s wa p 分区,越小表示越积极使用物理内存。

vm.swappiness = 80

最后通过 sysctl -p 使其生效

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

vm.panic_on_oom = 2

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

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

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

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

Comments