关于"out of memory"错误的解决

昨晚,在163上更新了最新的资源和服务器版本后,服务器读取资源时,出现"out of memory..."的错误提示,随后程序core dump。后经分析和查证,是因为没有正确设置swap分区大小导致的。LINUX的虚存大小=实际mem大小+swap大小。实际MEM,即指物理内存;swap大小,即指swap分区。我们的服务器,由于增加了很多场景资源,现在服务器启动后,DB+GAME共消耗1.7G左右的虚拟内存,而163的物理内存是1G,SWAP也是1G,两者之和为2G。再加上其它的软件占用的虚存,2G的实际虚存大小,就出现了不够用的情况,从而导致内存溢出错误。
   
解决方法是:将SWAP大小设定大一点。 从理论上来说,把SWAP大小设定为4G,那就不管实际内存多大,都不会有问题了,因为32位程序实际可访问的虚存上限就只有4G。

具体操作:

1、dd if=/dev/zero of=/tmp/swap bs=1024 count=4194304
创建一个4G的文件/tmp/swap

2、mkswap /tmp/swap
把/tmp/swap 文件,创建成swap 交换区

3、swapon /tmp/swap
挂载swap

4、swapon -s
查看当前你的swap分区的情况

5、将"swapon /tmp/swap "加入到/etc/rc.local文件里面,让其一开机的时候自动加载该swap文件

Best regards
大宝(sodme)
网易在线游戏事业部