Oracle RAC环境中有时常因为LMS进程取不到足够的CPU而hang,最终在lmhb监控进程发现lms hung超过70秒后而终止实例。lmhb是11G R2引入的RAC环境中新的后台进程,用于监控LMON、LMD、LMSn等RAC关键的后台进程,确认本地以上background process不被阻塞或spin, LMHB是Lock Manager HeartBeat的缩写。LMHB进程的跟踪日志也成为诊断RAC故障的主要的日志文件。
主要收集的日志:
- Alert logs form all instances ( Cluster alert.log, Rdbms alert.log, ASM alert.log )
- ocssd.logs for all instances ( note older files are named ocssd.l01, .. )
- LMON, LMSn, LMD0 traces from all instances
- Any other traces mentioned in any alert.log
- lmhb traces ( LMHB monitors LMON, LMD, and LMSn processes to ensure they are running normally without blocking or spinning )
- CHM and OSWatcher logs from the eviction time
- OS message logs form all nodes ( /var/log/messages for Linux )
这里记录一种现象:
1, db alert log 显示ora-29770 和lms has not moved for xx sec.
2, lmhb 显示loadavg 负载高
3, top 显示lms进程占用CPU高
4, top or mpstat 显示sys cpu高
5, gc cr failure 状态值高
6, UDP error包增长
7, lms 进程显示call stack如下
可能的原因
因为操作系统在刷新大量的dirty pages使用了大量的sys cpu.
解决方法
调整内核参数
vm.dirty_background_ratio = 1
vm.dirty_ratio = 3
可以修改/etc/sysctl.conf 执行sysctl -p生效
或
# echo 1 > /proc/sys/vm/dirty_background_ratio
# echo 3 > /proc/sys/vm/dirty_ratio
主要收集的日志:
- Alert logs form all instances ( Cluster alert.log, Rdbms alert.log, ASM alert.log )
- ocssd.logs for all instances ( note older files are named ocssd.l01, .. )
- LMON, LMSn, LMD0 traces from all instances
- Any other traces mentioned in any alert.log
- lmhb traces ( LMHB monitors LMON, LMD, and LMSn processes to ensure they are running normally without blocking or spinning )
- CHM and OSWatcher logs from the eviction time
- OS message logs form all nodes ( /var/log/messages for Linux )
这里记录一种现象:
1, db alert log 显示ora-29770 和lms has not moved for xx sec.
2, lmhb 显示loadavg 负载高
3, top 显示lms进程占用CPU高
4, top or mpstat 显示sys cpu高
5, gc cr failure 状态值高
6, UDP error包增长
7, lms 进程显示call stack如下
__poll()+47<-ssskgxp_poll()+40<-sskgxp_select()+263<-skgxpiwait()+3680<-skgxpwaiti()+1544<-skgxpwait()+162<-ksxpwait()+2501<-ksliwat()+12852<-kslwaitctx()+1
63<-kslwait()+141<-ksxprcv_int()+6092<-ksxprcvimd()+36<-kjctr_rksxp()+313<-kjctrcv()+398<-kjcsrmg()+102<-kjmsm()+4953<-ksbrdp()+971<-opirip()+623<-opidrv()+
603<-sou2o()+103<-opimai_real()+266<-ssthrdmain()+252<-main()+201<-__libc_start_main()+230<-_start()+36
sendmsg()+16<-sskgxp_sndmsg()+444<-skgxpsegsnda()+146<-skgxpimcpy()+5195<-skgxpmcpy()+238<-ksxpmcpy_with_bcb()+1115<-kclbcpy2()+324<-kcl_snd_cur()+2376
可能的原因
因为操作系统在刷新大量的dirty pages使用了大量的sys cpu.
解决方法
调整内核参数
vm.dirty_background_ratio = 1
vm.dirty_ratio = 3
可以修改/etc/sysctl.conf 执行sysctl -p生效
或
# echo 1 > /proc/sys/vm/dirty_background_ratio
# echo 3 > /proc/sys/vm/dirty_ratio
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




