线上的一套MySQL 5.6的从库,因为OOM而导致数据库重启。

#tail-50/var/log/messagesNov1316:00:40app-push-db2kernel:Outofmemory:Killprocess26121(mysqld)score957orsacrificechildNov1316:00:40app-push-db2kernel:Killedprocess26121(mysqld)total-vm:18804176kB,anon-rss:15541596kB,file-rss:0kB,shmem-rss:0kB


报错原因:

这台实例所在的服务器上面部署了单实例MySQL,物理内存为16G,分配给数据库的缓存innodb_fuffer_pool_size为12G。

#free-gtotalusedfreesharedbuff/cacheavailableMem:15100054Swap:000

为了提高性能,这台实例关闭了磁盘的swap交换。

#cat/etc/rc.local#!/bin/bash#THISFILEISADDEDFORCOMPATIBILITYPURPOSES##Itishighlyadvisabletocreateownsystemdservicesorudevrules#torunscriptsduringbootinsteadofusingthisfile.##Incontrasttopreviousversionsduetoparallelexecutionduringboot#thisscriptwillNOTberunafterallotherservices.##Pleasenotethatyoumustrun'chmod+x/etc/rc.d/rc.local'toensure#thatthisscriptwillbeexecutedduringboot.touch/var/lock/subsys/localswapoff-a

当客户端连接多的时候,导致内存资源耗尽。


解决方法:

将innodb_buffer_pool_size调整为10G,预留出一些内存给操作系统和客户端连接。

重启数据库,使参数生效。

#grepinnodb_buffer_pool/etc/my.cnfinnodb_buffer_pool_size=10G