系统内存不足导致OOM 错杀MySQL进程

2016.7.14 下午3点52分,线上从库突然挂掉,焦急中去查看MySQL error.log,竟没有当天的日志信息,这时感觉非常奇怪,线上这台从库系统内存不足,swap用尽已经很久,系统内存大小为64G,但系统中跑了N多服务如下:
Foreign   Address
LISTEN   23295/java
LISTEN   28052/sshd
LISTEN   48134/java
LISTEN   30661/vsftpd
LISTEN   18246/java
LISTEN   3173/sendmail
LISTEN   15892/nginx
LISTEN   15892/nginx
LISTEN   6791/./zabbix_agent
LISTEN   37958/java
LISTEN   1105/php-fpm
LISTEN   48253/java
LISTEN   5152/php-fpm
LISTEN   42326/mongod
LISTEN   20234/redis-server
LISTEN   40559/java
LISTEN   15892/nginx
LISTEN   40559/java
LISTEN   48253/java
LISTEN   40559/java
LISTEN   23295/java
LISTEN   28052/sshd
LISTEN   48134/java
LISTEN   18246/java
LISTEN   23295/java
LISTEN   48134/java
LISTEN   18246/java
LISTEN   37958/java
LISTEN   30200/java
LISTEN   30200/java
LISTEN   4007/java
LISTEN   30200/java
LISTEN   29188/xinetd
LISTEN   44914/mysqld
LISTEN   4007/java
LISTEN   20234/redis-server
LISTEN   48253/java
LISTEN   37958/java
接下来去查看了系统日志才发现发生了OOM,如图messages日志
mysql.png


之前一直抱着侥幸的态度去看待这个内存不足的事情,结果故障就出现了。。。
解决办法:
一,加大系统内存
二,根据业务场景把MySQL beffer_pool调小些,原先是设置为30G,我把它设置成了17G。
三,设置mongodb内存使用大小,它默认是启动后占用系统内存的一半(这点有点坑,本身mongodb数据就很小),这样占用这么多内存,简直是浪费资源
四,可设置系统参数(echo 17> /proc/PID/oom_adj),让MySQL进程即使发生OOM也不会被kill掉。
当天晚上修复从库同步主库,我是采用全量备份恢复到从库:
主库操作:innobackupex --user=root --password='password'   /data/backup/db/
scp -r 2016-07-14_00-35-05 192.168.1.145:/data/backup 
从库:关掉从库清掉相应目录下的文件后导入数据
innobackupex --apply-log 2016-07-14_00-35-05
innobackupex --copy-back 2016-07-14_00-35-05
改data 和logs目录下文件 权限后,启动MySQL

(product)root@localhost >SET @@GLOBAL.GTID_PURGED = ‘1ffd358a-32d2-11e6-8723-52540080d1c1:1-41008’
change master to 略........

总结:
造成此次故障主要原因是资源没分配好,内存不足问题没有引起重视!
已邀请:

A390_Fander

赞同来自: Darren

以linux-3.3.6版本的kernel源码为例,路径为linux-3.6.6/include/linux/oom.h,阅读内核源码可知oom_adj的可调值为15到-16,其中15最大-16最小,-17为禁止使用OOM。oom_score为2的n次方计算出来的,其中n就是进程的oom_adj值,所以oom_score的分数越高就越会被内核优先杀掉。
 
应该是echo -17> /proc/${PID}/oom_adj 才对吧。

lixd

赞同来自:

学习了

yaowenlong

赞同来自:

echo 17> /proc/PID/oom_adj
这个学到了,linux知识还要加强才行呀

A128_huanggr - 80后IT男 黄桂荣

赞同来自:

要回复问题请先登录注册