Linux系统参数造成的Oracle服务器停止响应
环境:
Oracle 11gr2 + dataguard
512GB内存 + 128核cpu + 高性能存储服务器
uname -an
Linux dbhost 2.6.18-238.el5 #1 SMP Sun Dec 19 14:22:44 EST 2010 x86_64 x86_64 x86_64 GNU/Linux
症状:
做rman备份时,系统内存急剧下降,直到系统失去响应宕机。
病因:
linux默认参数vm.min_free_kbytes 64mb,
/proc/sys/vm/min_free_kbytes
该文件表示强制Linux VM最低保留多少空闲内存(Kbytes)。
当可用内存低于这个参数时,系统开始回收cache内存,以释放内存,直到可用内存大于这个值。
/proc/sys/vm/vfs_cache_pressure
该文件表示内核回收用于directory和inode cache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inode cache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directory和inode cache;增加该值超过100,将导致内核倾向于回收directory和inode cache。
由于rman备份到本地存储,占用大量内存做cache,当内存不够时,系统开始回收cache内存,把数据同步写入磁盘。写入磁盘过程是比rman写入内存的速度要慢得多,rman继续申请占用cache,而系统却无法及时回收可用内存,最终可用内存为0,导致系统失去响应。
解决办法:
修改参数:最低保留内存加大至50gb,vfs_cache_pressure改到200
vm.min_free_kbytes = 52428800
vm.vfs_cache_pressure=200
经实测,rman备份时,可用内存下降到50gb附近(最低45gb),不再下降,系统运行正常。