UDN-企业互联网技术人气社区

板块导航

浏览  : 412
回复  : 1

[讨论交流] 墨菲定律:一个参数Drop_caches导致集群数据库实例崩溃

[复制链接]
我爱吃咸菜的头像 楼主
发表于 2016-4-25 11:19:55 | 显示全部楼层 |阅读模式
  来源: 李真旭 Oracle

e70a378b43515e2d6d69e908d41c8190.jpg


  在墨菲定律里,我们知道,有可能发生的故障就一定会发生,哪怕需要诸多因素的叠加才可能满足那复杂的先决条件。在以下案例中,我们抽丝剥茧,细致入微的追溯最终确定了导致数据库RAC实例崩溃的微小原因。

  这是一个真实的客户案例,可以概括为一条参数引发的血案。现象大致是某天凌晨某RAC节点实例被重启了,通过如下是alertlog我们可以发现RAC集群的节点2实例被强行终止掉了,如下是详细的告警日志信息:

cc08858cd61d9a4a90f1572e9c8bf0ab.jpg


  从上面的日志来看,在2:03分就开始报错ORA-00600,一直持续到2:39分,lmd0进程开始报同样的错误;然后接着LMD0进程强行把数据库实例终止掉了。。直接搜索OracleMOS,看上去有点类似这个bug,不过很容易就可以排除。

  Bug 14193240 : LMS SIGNALED ORA-600[KGHLKREM1] DURING BEEHIVE LOAD

  从日志看,2:03分就开始报错,然而直到lmd0报错时,实例才被终止掉,也就是说lmd0报错才是问题的关键。那么我们首先来分析下lmd0进程的trace文件内容,如下所示:

1a115a31c4cfe8e9cb945ff91c0a7eeb.jpg


  从上面的信息来看,确实是内存heap存在错误的情况。

  根据OracleMOS文档: ORA-600 [KGHLKREM1] On Linux Using Parameter drop_cache On hugepages Configuration

  (1070812.1)的描述来看,此次故障跟文档描述基本上一致,如下:

4e809ef0ea2c54daab2f9d03ed017eb1.jpg


  其中地址[0x679000020]后面的内容也均为0,跟文档描述一样,其次,文章中提到使用了linux内存释放机制以及同时启用了hugepage配置。

  根据文档描述,这应该是Linuxbug。通过检查对比2个节点配置,发现节点2的配置确实不同:

4269a4cb20d4ade0f26c53733174211b.png


  当drop_caches设置为3,会触发linux的内存清理回收机制,可能出现内存错误的情况;然而我们检查配置发现并没有修改:

770c7532951293fc93570c826393be80.jpg


  因此,我认为是之前人为进行了echo3>/proc/sys/vm/drop_caches操作来强制释放内存导致。通过分析发现只能查看到最近几分钟的操作记录,如下:

86b438f64c8657b4b6c3feb5bc261018.jpg


  看操作记录确实发现了操作,那么同时检查操作系统日志也发现了一些蛛丝马迹,如下:

  BUG:softlockup-CPU#1stuckfor10s![rel_mem.sh:13887

 
9f6bdc1eb353bbf3a4236f172206e6b5.jpg


  可以看到也确实出现了drop_cache的相关操作。大家注意看上面红色的地方,提到了是执行了一个shell脚本,然后还导致一共cpustuck了,而且也能看出该脚本是在执行回收cache的动作。

  我坚持认为客户环境上肯定进行了强制的内存回收,但是客户说他们没有进行任何人为操作,不过经过我检查发现确实有一个crontab脚本。

6bab3b9a5b976f229df83f071ed321c7.jpg


  那么为什么主机上会部署这样的脚本呢?我猜想肯定是操作系统的内存使用率看起来很高,通过检查发现确实如此:

8aeb12a7942938fc09dc1e4d17f90614.jpg


  我们可以看到128G的物理内存,cache就占据了88G的样子目前。linux文件系统的cache分为2种:pagecache和buffercache,pagecache是用于文件,inode等操作的cache,而buffercache是用于块设备的操作。从上面的数据来看,我们所看到的free-m命令中的cached88552全是pagecache。而实际上该数据库实例的内存分配一共也就40G,且使用的是linux raw。

fbe57e1e2584521935d7c230b091e09f.jpg


  我们可以看到,整个主机物理内存为128G,而OracleSGA+pga才40g,另外将近90G的内存都是fscache所消耗。完全可以调整linux的参数去释放cache,而不需要使用echo这种比较暴力的方式;根据Oraclemos的几个文档的描述,推荐设置如下几个参数:

  sysctl -w vm.min_free_kbytes=4096000

  sysctl -w vm.vfs_cache_pressure=200

  sysctl -w vm.swappiness=40   (老版本的 linux 是设置 vm.pagecache 参数)
发表于 2016-4-25 13:50:53 | 显示全部楼层
赞一个
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部