VPS - OpenVZ主机编译代码发现内存不足的问题
问题说明
今天编译Opencv,进行编译的过程中,直接报错,信息如下
c++ internal compiler error 已杀死 (program cc1plus)
分析问题
由于这个虚机是512M的内存,Google了一把,果然是这个问题
解决方案 - 针对Xen,kvm虚机
这个问题原因是因为内存不足,一般建议使用交换分区来解决
方法如下:
dd if=/dev/zero of=swapfile bs=1G count=8
mkswap /swap/swapfile
chmod 0600 /swap/swapfile
swapon /swap/swapfile
使用过后,卸载的交换文件的方法:
swapoff /swapfile
rm /swapfile
这个方案的解决思路其实就是利用SWAP作为是一块硬盘上的区域,系统会将内存中暂时不用的信息转移到SWAP区中,需要用到时再从SWAP中调入内存,这样就实现了内存的扩大,其原理和Windows系统中的页面文件(pagefile)类似。
解决方案 - 针对openvz,扩内存
很遗憾,以上的方案对openvz无效,执行swapon
指令会提示无权限。
网上提供了一个脚本,如下:
#!/bin/bash
SWAP="${1:-512}"
NEW="$[SWAP*1024]"; TEMP="${NEW//?/ }"; OLD="${TEMP:1}0"
umount /proc/meminfo 2> /dev/null
sed "/^Swap\(Total\|Free\):/s,$OLD,$NEW," /proc/meminfo > /etc/fake_meminfo
验证是错误的,如果你分析这个脚本可以发现,它只是伪造了一个内存的显示数据,从而欺骗了free这个工具。这个脚本误导了很多人。
所以,如果对Openvz虚机,只能通过扩容内存才是可行的方案。
展开剩余53%