远程协助解决异常宕库的问题(r11笔记第75天)
昨天帮助一个网友处理了一个数据库异常宕机的问题,简单记录一下。
说到这个问题,也是一位网友给我发邮件说有一个数据库环境,会突然出现宕机的情况,想让我帮忙分析一下问题的原因。我一听这个问题就来了兴趣。大大小小的宕机问题也接触了不少,这个问题还是值得探究的。
我首先得到了这位朋友提供的alert日志。简单看了下,近期没有发现什么明显的异常信息。但是看到日志中去年的时候,有这样的一段内容。
Mon Sep 19 14:38:17 2016
WARNING: Heavy swapping observed on system in last 5 mins.
pct of memory swapped in [3.30%] pct of memory swapped out [0.61%].
Please make sure there is no memory pressure and the SGA and PGA
are configured correctly. Look at DBRM trace file for more details.
Mon Sep 19 15:54:50 2016
在这之后,这类信息就没有出现过。
最近的一次宕机相关的日志如下:
Thu Feb 02 02:00:00 2017
Closing scheduler window
Closing Resource Manager plan via scheduler window
Clearing Resource Manager plan via parameter
Thu Feb 02 02:05:39 2017
PMON (ospid: 29552): terminating the instance due to error 471
Thu Feb 02 02:05:39 2017
可以看出核心进程PMON是因为异常原因终止的,也就导致了所谓的宕库。
通过上面的信息,我心里已经有了一个大概的方向,那就是这个环境没有开启大页,存在大量的swap争用。通过启动日志看到,SGA的设置不高,服务器配置比较低,所以资源使用也比较紧张,至于宕库原因很可能是因为内存资源不足导致的,如果没猜错就是oom-killer的情况。
所以我让这位朋友去看看系统日志的情况,是否存在oom-killer的情况,没过多久,看到反馈的截图,证明了第一步猜测是正确的了,确实是oom-killer导致的。
这样一来问题的原因就比较明显了,内存资源不足,并发症就是存在大量的swap.
在这位网友的协助下,我登录到了远程端查看,可以看到当前的swap已经非常高了,机器配置不高。
Mem: 8062100k total, 7922104k used, 139996k free, 164460k buffers
Swap: 4128760k total, 3872660k used, 256100k free, 5414088k cached
但是8G的内存分配了2G的SGA也不至于导致oom-killer啊。
查看了具体的环境,发现这个服务器上运行着另外的几套数据库,而根据初步的估算,4套数据库的SGA平均设置都是2G~4G,这样一来SGA就把内存占满了,还不包括PGA的设置,所以这是一种过载的配置,系统资源就那么些,配置太高,反而给系统造成了一种误导,导致在/tmp目录下生成了大量的文件。
这类文件能不能删,绝对不能直接删除,否则会导致宕库的情况发生,而怎么杜绝问题呢,就是调整SGA的大小,控制在一个相对合理的范围内,因为这是一个测试环境,所以SGA设置为1G也是可以接受的。多个数据库使用的SGA就不会溢出,调整PGA使得控制在一个相对合理的范围内。
然后我设置了内核参数来调整大页,整个过程需要重启数据库,先设置参数生效,然后逐个验证。
调整之后,根据我对问题的跟进,目前来看系统的资源情况是得到了合理控制,/tmp下也没有生成大量的临时文件。
我想这个问题应该不会再发生了。
- Android解析WindowManager(三)Window的添加过程
- Spring Cloud构建微服务架构:服务消费(Ribbon)【Dalston版】
- Android解析WindowManager(一)WindowManager体系
- ios9 http请求失败的问题
- Android内存优化(六)LeakCanary使用详解
- Spring Cloud构建微服务架构:服务消费(Feign)【Dalston版】
- React Native组件(四)TextInput组件解析
- struts2实现ajax校验的2种方法
- 单例对象
- Android+struts2+json方式模拟手机登录功能
- iOS 获取通讯录里边的电话号码AddressBook
- InvocationTargetException异常解析
- Spring Cloud构建微服务架构:服务注册与发现(Eureka、Consul)【Dalston版】
- java基础多线程之共享数据
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 设计模式实战-过滤器模式,你总是这么挑三拣四
- 时间选择器组件之关于table走过的弯路
- 设计模式实战-观察者模式,你知道发布订阅怎么实现吗
- 设计模式实战-桥接模式,想做月老吗?
- 设计模式实战-原型模式,我们就来依法炮制
- 设计模式实战-建造者模式,做任何事情都需要步步为营
- 设计模式实战-单例模式,我就是天下无双
- 设计模式实战-抽象工厂模式,分而治之
- 搞定常被问的数组和排序算法,附面试题
- 玩转 Java 时间 + 面试题
- 【分布式技术】分布式系统调度架构之两层调度,解决单体调度问题
- 一致性哈希算法,在分布式开发中你必须会写,来看完整代码
- FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放
- 【Postgres扩展】pg_auto_failover支持高可用性和自动故障转移
- 「PostgreSQL」用MapReduce的方式思考,但使用SQL