直接查看节点上/oracle/11.2.0/grid/log//cssd/ocssd.log,重点搜索CRS-1611(75%心跳丢失)、CRS-1610(90%)和CRS-1607(驱逐触发)三类递进式错误;若多节点同时密集出现,大概率是底层网络抖动,需结合ethtool、ping及GV$SYSTEM_EVENT等待桶分布进一步定位。
怎么看ocssd.log里的心跳丢包告警
直接翻节点上的 /oracle/11.2.0/grid/log/<hostname>/cssd/ocssd.log</hostname>,重点搜 crs-1611、crs-1610、crs-1607 这三类错误。它们不是“偶尔报一下”,而是按时间桶递进出现的:先 crs-1611(丢失 75% 心跳),再 crs-1610(90%),最后 crs-1607(触发驱逐)。如果同一时间段内多个节点都密集打出这些日志,基本可断定是底层网络抖动,而非单点故障。
注意两个细节:
-
CRS-1611后面带的时间值(如in 6.512 seconds)越小,说明心跳丢失越严重,网络恢复窗口越窄 - 若只有一侧节点持续报
CRS-1612(“this node was evicted by node X”),而另一侧没报对应CRS-1610,大概率是被驱逐节点自身网络收包异常(比如网卡丢包、中断风暴),不是对端问题
用crsctl和ethtool交叉验证是否真抖动
crsctl check cluster -all 只能告诉你“集群通不通”,不能区分是网络层抖动还是上层阻塞。真正要定位抖动,得看网卡底层指标:
- 跑
ethtool -S eth2 | grep -E "(rx_discards|tx_aborted_errors|rx_errors)"——只要非零,基本指向驱动缺陷、交换机QoS限速或物理链路不稳定,不是Oracle配置问题 -
ifconfig eth2的 RX/TX 字节数不能直接除以带宽算利用率:它统计的是含以太网头的L2字节数,而Oracle GC流量走TCP载荷,每包多出40–60字节,直接套用会高估15%–20% - 用
ping -c 100 -i 0.1看延迟分布:重点关注 >10ms 的包占比。RAC私网要求 95% 包延迟 ≤ 2ms,一旦 >5% 的包超过 5ms,GC等待就会明显上扬
GC等待事件桶分布比ping值更能说明问题
别急着换网卡或调MTU。先查 GV$SYSTEM_EVENT 中的 gc cr block busy 和 gc current block busy 等待事件,重点看 TIME_WAITED_MICRO 按毫秒桶的分布:
- 如果大量等待集中在
16ms桶(即16–32ms区间),才是真实网络抖动或瞬时中断 - 如果集中在
1ms或4ms桶,90%以上是锁争用、未绑定变量的循环SQL、或全表扫描JOIN导致的GC流量激增,跟网络本身关系不大 - 配合
GV$SQL查buffer_gets/executions高但disk_reads/executions低的语句——这类SQL在单实例飞快,在RAC上却疯狂触发GC,是典型的“假抖动”源头
HAIP启动失败时怎么确认是不是心跳网络抖动
HAIP(Highly Available IP)依赖私网心跳稳定才能完成地址分配和绑定。如果 ora.cluster_interconnect.haip 资源反复 OFFLINE,先别改GPnP配置:
- 查
$GRID_HOME/log/<hostname>/agent/ohasd/orarootagent_root/orarootagent_root.log</hostname>,找关键词Failed to initialize HAIP或no private interface found - 运行
$GRID_HOME/bin/oifcfg getif确认私网接口是否被识别为cluster_interconnect类型;若显示为空或类型不对,说明底层网络连通性已断裂 - HAIP地址段是
169.254.0.0/16,这个范围不经过路由,纯靠ARP+链路本地发现。一旦某个节点ARP响应延迟超 100ms,HAIP就无法完成地址协商,表现为“启动一半卡住”
真正难排查的,是那种间歇性、亚秒级的ARP响应延迟——它不会让ping彻底失败,却足以让HAIP初始化超时。这时候必须抓 tcpdump -i eth2 arp 看对端ARP reply的RTT分布,而不是只看ICMP。











