
在小内存机器上编译程序会导致 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 = 2panic_on_oom = 0 时开启内核 o o m 保护机制,会杀掉超出资源消耗的进程。panic_on_oom = 1 时则会关闭此功能。
但是我自己这里是指 0 或 1 都没有什么用,无奈之举,设置为 2 之后。发现刚刚已经开启虚拟内存分区已经没了。
我重新激活分区之后,再尝试进行编译,发现此时虚拟内存已经被充分使用了。
此后,你可以将 o o m 设置为 0 或者 1 ,需要注意的是每次修改内核参数文件后,都需要通过执行 sysctl -p 使其生效。




Comments