最近经常有收到MySQL实例类似内存不足的报警信息,登陆到服务器上一看发现MySQL 吃掉了99%的内存,God !

有时候没有及时处理,内核就会自己帮我们重启下MySQL,然后我们就可以看到 dmesg 信息有如下记录:

Mar 9 11:29:16 xxxxxx kernel: mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0

Mar 9 11:29:16 xxxxxx kernel: mysqld cpuset=/ mems_allowed=0

Mar 9 11:29:16 xxxxxx kernel: Pid: 99275, comm: mysqld Not tainted 2.6.32-431.el6.x86_64 #1

Mar 9 11:29:16 xxxxxx kernel: Call Trace:

现描述一下具体场景吧:

大前提 : 操作系统以及MySQL 版本:

OS : CentOS release 6.5 (Final) Kernel : 2.6.32-431.el6.x86_64(物理机)

MySQL : Percona 5.6.23-72.1-log(单实例)

触发场景:Slave 不管是否有其它链接进来都会出现内存周期性的暴涨,触发内核oom-killer

据说这个问题都出现了1年多了,由于刚过来,老大就让我再查查看能不能找到什么蛛丝马迹,那么就开始Check 这个问题咯:

1. 怀疑给MySQL 分配的内存不合理,那么我就去check 了一下 innodb_buffer_pool 的大小 和物理内存的大小,发现分配给BP的大小占物理内存的60%左右,那么不是这个原因, 排除掉,要是是这个问题它们也应该早就发现了~

2. 检查操作系统各项参数配置。[vm.swappiness = 1 ; /proc/sys/vm/overcommit_memory ; oom_adj ] 在没排查到问题前可以临时设置一下 adj参数 给个 -15 或者直接 -17,这样内核就永远不会kill 掉 mysql了, 但是这样做不能根本解决问题, 而且存在一定的风险, 会不会导致MySQL 需要内存又分配不出来而hang住呢? 这个办法就想想算了吧。

3. 好吧,mysql初始化参数、操作系统参数看起来没什么配置有不恰当的地方。那我们就来找找MySQL 本身的吧!

既然MySQL 内存一直处于在飙升的状态,那么,会不会是由于内存分配的时候导致的呢,那么根据网上报了一个MySQL 内存分配引起的一个Bug,我也来在我这个环境操作一把,一看究竟:1.记录当前 MySQL 进程占用的 内存大小;2.记录 show engine innodb status ; 3. 执行 flush tables; 4.记录 show engine innodb status; 5. 记录 MySQL 进程占用大小;6 对这两次结果进行对比,主要看看在执行Flush table 前 和 Flush Table 后MySQL 分配的内存有没有明显的变化。 好吧, 这个bug 貌似不再我这里。

看了一下这个版本有个 innodb_buffer_pool_instances 参数,官网上也有关于innodb_buffer_pool_instances 和 innodb_buffer_pool_size设置不当 导致MySQL OOM 的 bug ,大概的意思就是:我们可以给innodb_buffer_pool_size 设置的比我们实际物理内存要大,比如我们物理内存是:64GB,而我们设置 innodb_buffer_pool_size=300GB,并且把 innodb_buffer_pool_instances > 5 ,我们就依旧可以把MySQL 拉起来。但是呢, 这样MySQL很容易OOM。详细信息:http://bugs.mysql.com/bug.php?id=79850 这里看过来。

还有种情况,也报过BUG,就是 slave 设置过滤的时候,也会触发OOM ,but 我这些个 Instance 没有设置, 所以就 忽略这点咯。

既然不是MySQL内存超售引起,也不是 打开表的句柄导致。那么还有什么原因呢?

我们再想想,这个现象出现在Slave,Master 和Slave 配置一样, 只是Master 上跑了生产业务,Slave 上有些Instance 跑了查询业务,有些Instance 根本就没有跑任何任务,但是还是会出发OOM,那么这种情况很可能就是 Slave 引起的囖。

那我就找了个实例上去试了一把, 不试不知道啊, 一试吓一跳。上去执行了一下:stop slave;start slave;这个命令卡了大概3分钟,再一看内存使用情况,一下子释放出来了20GB+。 到这里基本上算是定位到了问题所在了,但是Slave 我们都知道有两个线程,到底是由于SQL Thread 还是 IO Thread 导致的呢? 这个还的等待下次即将发生时在进一步排查了。

贴点内存的监控信息:

12:00:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit

02:40:01 PM 566744 131479292 99.57 88744 618612 132384348 89.19

02:50:01 PM 553252 131492784 99.58 83216 615068 132406792 89.20

03:00:01 PM 39302700 92743336 70.24 95908 925860 132413308 89.21

03:10:01 PM 38906360 93139676 70.54 109264 1292908 132407836 89.21

03:20:01 PM 38639536 93406500 70.74 120676 1528272 132413136 89.21

我把稍微再具体点的东西记录到了这里:https://bugs.launchpad.net/percona-server/+bug/1560304如果不能访问可以访问(http://www.bitsCN.com/article/88729.htm)

最后稍微总结一下:

现象:Slave OOM

临时解决办法: 重启Slave

长期解决办法: 小版本升级 MySQL Server

更系统点的请看郭总写的:

http://www.bitsCN.com/article/88726.htm

http://www.bitsCN.com/article/88727.htm

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

mysql缓解oom发生的方法_MySQL Slave 触发 oom-killer解决方法_MySQL相关推荐

  1. net start mysql 发生系统错误 5。 拒绝访问。的解决方法

    net start mysql 发生系统错误 5. 拒绝访问.的解决方法 发生的问题,由于默认情况下cmd是以用户身份运行的,出现此类问题是由于没有权限.运行cmd时需要以管理员身份运行 以管理员身份 ...

  2. mysql出现ERROR1698(28000):Access denied for user root@localhost错误解决方法

    mysql出现ERROR1698(28000):Access denied for user root@localhost错误解决方法 参考文章: (1)mysql出现ERROR1698(28000) ...

  3. myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法)

    myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法) 参考文章: (1)myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法) (2)https://www. ...

  4. MySQL出现Incorrect integer value: ‘‘ for column ‘id‘ at row 1解决方法

    MySQL出现Incorrect integer value: '' for column 'id' at row 1解决方法 参考文章: (1)MySQL出现Incorrect integer va ...

  5. mysql数据库表字段使用DESC等关键字报错及解决方法

    mysql数据库表字段使用DESC等关键字报错及解决方法 参考文章: (1)mysql数据库表字段使用DESC等关键字报错及解决方法 (2)https://www.cnblogs.com/li--xi ...

  6. MySQL无法启动并提示file could not be found的解决方法

    今天在测试时就遇到了MySQL挂掉始终无法启动的问题,看了半天日志也没找出到底是怎么回事. [root@iZ23zpftdweZ ~]# /etc/init.d/mysql start Startin ...

  7. MySQL ERROR 1017 Can’t find file ‘xxx.frm’…错误的解决方法

    MySQL ERROR 1017 Can't find file 'xxx.frm'-错误的解决方法 有的时候发现MySQL数据库某些表出现如下错误: ERROR #1017 :Can't find ...

  8. 服务器显示器蓝屏怎么办,win7系统经常发生显示器蓝屏四种原因和解决方法

    在win7旗舰版系统中,显示器发生蓝屏属于常见问题之一,相信很多用户都有遇到过,最烦恼就是工作到一半数据没有保存就发生蓝屏了.其实造成显示器发生蓝屏的原因有很多种,小编给大家收集总结win7系统经常发 ...

  9. mybatis向mysql数据库插入数据时,中文乱码显示为?解决方法

    mybatis向mysql数据库插入数据时,中文乱码显示为?解决方法 1.先查看库.表.表字符字段的编码格式.MySQL默认的库和表的字符编码都是latin1,而我们一般需要使用 utf8 //先查看 ...

  10. ajax scripmanager,ScriptManager.RegisterStartupScript()方法在ajax页面无效的解决方法

    ScriptManager.RegisterStartupScript()方法在ajax页面无效的解决方法 更新时间:2010年03月08日 19:25:10   作者: ScriptManager. ...

最新文章

  1. oracle 查看连接数语句,Oracle数据库中查询连接数的实用sql语句
  2. NC:遗传发育所Speakman组-棕色脂肪是无菌小鼠改善血糖的关键
  3. 接口隔离原则最直白描述
  4. uni-app开发所有前端应用的框架
  5. 解决eclipse中tomcat无法识别maven web项目问题
  6. ZOJ1081 Points Within
  7. linux运维适合女生么,女生真的不适合做IT行业吗?Linux运维适合女生学习吗?
  8. 计算机内存只认4,为什么电脑的8GB内存只有7.45GB可用?
  9. tmp name php,linux环境 上传文件失败 tmp_name为空
  10. 关于计算流体力学,你知道多少?
  11. 在线古诗自动生成器的设计与实现
  12. 图片去水印方法(不用下载任何东西)
  13. Prioritizing Web Usability
  14. word上次启动失败,安全模式可以帮你解决问题
  15. 对字下面添加下划虚线
  16. 虚荣设备未能连接至服务器,虚荣无法连接服务器怎么办
  17. 【Rust日报】2022-11-19 mold linker 项目发布v1.7.1
  18. 零基础怎么学习学单片机?单片机软件编程培训
  19. 智慧农业app的具体功能
  20. 利用freemark进行pdf的转换

热门文章

  1. Oracle 10g安装64位图解流程
  2. 【Elasticsearch 2.x】issues
  3. FauxPas试用时间破解
  4. JavaSE的一些基础内容
  5. JavaWeb中连接数据库的一般方式与通过JNDI连接池的方式
  6. update值与原值相同时,SQL Server会真的去update还是忽略呢?
  7. javascript: new Date(string)在IE中显示NaN的问题!
  8. fastdfs 开启 token 防盗链,以及验证失败原因
  9. 比特币现金支付接入日本便利店
  10. Java B2B2C多用户商城 springcloud架构-服务容错保护(Hystrix服务降级)