在阿里云的Ubuntu 14.04系统上解决Tomcat 7由于OOM(Out Of Memory)而被系统杀掉的问题

最近服务器上面一直出现Tomcat莫名奇妙的被系统杀掉,后来从系统的日志中找到如下信息:

Oct 10 02:55:16 AY130422143404983ad9 kernel: [451276.905623] Out of memory: Kill process 809 (java) score 241 or sacrifice child
Oct 10 02:55:16 AY130422143404983ad9 kernel: [451276.905684] Killed process 809 (java) total-vm:1291052kB, anon-rss:493732kB, file-rss:0kB

原来是系统内存不足,导致进程被杀掉了,网上搜了一下,解决方法有两个

1.限制Tomcat使用的内存

方法如下:

$ sudo vim /usr/share/tomcat7/bin/setenv.sh

在文件尾部增加如下配置:

#防止Tomcat的OOM
export JAVA_OPTS="-server -Xms512M -Xmx1024M"

然后重启Tomcat

$ sudo service tomcat7 restart

2.为阿里云服务器增加swap分区/swap文件,来解决物理内存不足的问题

阿里云的服务器默认没有开启交换分区,导致内存极易耗尽导致服务被杀死,解决方法就是手工增加一个交换文件,来解决这个问题。

#如果要修改或者调整交换文件的大小,需要先停止交换文件,然后才能调整
# sudo swapoff -a

#创建一个2G的文件,要求每个扇区512个字节
$ sudo dd if=/dev/zero of=/swaps_file bs=512 count=4194308

$ sudo chmod 0644 swaps_file

$ sudo mkswap /swaps_file

$ sudo swapon /swaps_file

$ sudo cp /etc/sysctl.conf /etc/sysctl.conf.bak.old

$ sudo sed -i 's/^vm.swappiness[ \t]*=[ \t]*0$/vm.swappiness = 60/g' /etc/sysctl.conf

$ sudo cat /proc/sys/vm/swappiness

$ sudo sysctl -w vm.swappiness=60

$ sudo cat /proc/sys/vm/swappiness

$ sudo sed -i '$a\/swaps_file swap swap defaults,discard 0  0' /etc/fstab

$ sudo cp /etc/rc.local /etc/rc.local.bak.old

$ sudo sed -i 's/^swapoff[ \t]*-a$/swapon -a/g' /etc/rc.local

参考链接


发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注