Linux内存不足杀死进程

今天中午睡醒了起来一看群炸开了锅,网站挂了。
当时我没在意,这只是重启了一下,等了一会又挂了。

看看Tomcat的日志没问题啊,一切正常。

但是一看系统日志(cat /var/log/messages),立马就找到了问题:

Nov 21 14:38:37 server kernel: java invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
Nov 21 14:38:37 server kernel: java cpuset=/ mems_allowed=0
Nov 21 14:38:37 server kernel: Pid: 25206, comm: java Not tainted 2.6.32-431.23.3.el6.x86_64 #1
...
Nov 21 12:52:50 server kernel: Out of memory: Kill process 21499 (java) score 862 or sacrifice child

Nov 21 12:52:50 server kernel: Killed process 21499, UID 0, (java) total-vm:3484356kB, anon-rss:1709464kB, file-rss:312kB

原来是内存不够被系统给kill了

我先清理了一下内存:echo 1 > /proc/sys/vm/drop_caches。然后去网上找解决办法。

我用free看了一下系统内存也不科学,居然没有设置虚拟内存。果断是服务器供应商想我多加点内存。

自己加点交换分区:

  • 设置swap路径及大小:dd if=/dev/zero of=/var/swap bs=1024 count=4096000 // 一般两倍于内存,这里处理会久一点。
  • 设置交换文件:mkswap /var/swap
  • 启用交换分区:swapon /var/swap
  • 开机自挂:在/etc/fstab中加上这一行:/var/swap swap swap defaults 0 0

Done

参考文章:
http://www.vpsee.com/2013/10/how-to-configure-the-linux-oom-killer/
http://guogoul.com/2010/04/28/oom-killer-swap/