故障类型
操作系统内存泄漏
现象错误号
本次故障现象:
第一 主机内存几乎耗尽,大量swap被使用。主机、数据库登入严重卡顿。
第二 每次重启数据库的十几分钟之内很正常,但那之后又很卡
故障描述
HIS数据库1月17日6点左右从原先P550服务器切换至P720,切换完成之后,数据库版本保持不变即11.2.0.3,,主机操作系统版本从原来的AIX 6.1升级至AIX 7.1(操作系统版本为7100-03-00-0000,没有安装SP3补丁)。运行3天之后,即从1月21日开始,数据库由于操作系统内存不足产生大量交换,而导致多次宕机。美创科技工程师经过仔细诊断,发现操作系统内存不足(P720有64GB内存)是由于命中Oracle BUG 10190759和缺失操作系统补丁IV53587引起的。其中Oracle BUG会导致USLA heap size从原来的几十KB上涨到7MB左右,操作系统补丁IV53587缺失会导致操作系统的内存回收机制不能完全执行。详见Oracle MOS官方文档和IBM官方文档:
11gR2/Aix - Dedicated Server Processes Have Large Usla Heap Segment Compared To Older Versions
Virtual Memory Consumption Paging under AIX 7.1 ( 文档 ID 1666458.1)
http://www-01.ibm.com/support/docview.wss?uid=isg1IV53582
针对Oracle BUG 10190759,工程师打了Oracle Patch:10190759 ,内存过度消耗有一定程度的缓减,但是内存使用率依然高达90%左右。随后,我们建议主机工程师打操作补丁IV53587。由于IV53587包含在AIX 7.1 SP3补丁集中,主机工程师打了SP3补丁集之后,操作系统内存大量消耗问题得到彻底解决,观察3天之后,内存使用量维持在50%左右。
故障原因分析
Oracle 单个进程内存使用存在泄漏
可以使用svmon -P PID - where PID is an Oracle process id进程跟踪。
Oracle Release -> (work USLA heap times 4k pages size) 独占模式下不同版本进程内存使用值
11.2.0.1.0 -> 7M bytes
11.1.0.7.0 -> 60KB
10.2.0.4.0 -> 420KB
Slow system performance for larger footprint of all oracle server process. If physical memory is fully used, the could terminate an Oracle instance via terminating a PMON process.
同样,vmstat监控命令也显示,故障期间,主机已经产生了大量交换。内存严重不足。如下所示:
提取故障时间点的awr报告与正常时间段的进行对比。同样时间点正常时间段的AWR报告:
同样时间点故障时间段的AWR报告:
对比两份awr报告,可以发现故障时间段的latch:shared pool和libaray cache:mutex x等待十分严重,结合操作系统资源使用情况,基本可以确定是由于内存不足导致数据库性能急剧下降。
11gR2/Aix - Dedicated Server Processes Have Large Usla Heap Segment Compared To Older Versions (文档 ID )
从oracle官方提示的文档可以看出是由于USLA HEAP的使用异常导致内存使用不断上升。 使用情况,如下所示:
从USLA HEAP的使用情况( 1638 4KB pages也就是 6.5MB)可以判断进程私有使用量已经接近oracle官方提示的1800 4KB pages 也就是 7MB左右。这是oracle官方公布的一个bug 10190759。 解决方法如下:
打Oracle Patch:10190759。
打完Bug 10190759补丁之后 ,如下所示:
故障总结
从本次故障分析来看,主要是由于Oracle bug导致进程内存使用存在泄漏的。
参考文档
11gR2/Aix - Dedicated Server Processes Have Large Usla Heap Segment Compared To Older Versions (文档 ID 1260095.1)
