不能直接调misscount来避免误驱逐,因其是脑裂判定阈值而非防误驱开关;盲目调大将延长故障发现时间、加剧GCS/GES积压与锁争用,甚至引发实例停滞;真正原因95%是私网不可靠,须优先排查链路独占性、MTU、延迟及丢包率,并严格同步调整misscount与disktimeout。

不能直接调 misscount 来“避免误驱逐”——它不是防误驱的开关,而是脑裂判定阈值。盲目调大反而会延长故障发现时间,增加数据损坏风险。
为什么改 misscount 常导致更严重问题
Oracle RAC 的节点驱逐决策依赖网络心跳(misscount)和磁盘心跳(disktimeout)双重校验。只调大 misscount 而不匹配 disktimeout,会造成两种心跳超时窗口错位:
-
misscount过大(比如设为 120),但disktimeout仍为默认 200,会导致节点在私网延迟突增时迟迟不被检测,而其他节点已通过 Voting Disk 投票完成驱逐,形成“单边失联+未重启”的悬挂状态 - OCSSD 日志里会出现大量
WARNING: clssnmSendingThread: node <n> heartbeat missed,但直到 100% 超时才触发动作,期间 GCS/GES 消息积压、全局锁争用加剧 - 金融类业务中曾有案例:将
misscount从 30 改到 60 后,一次私网瞬断 42 秒,节点未被及时驱逐,却因 LMSn 进程 hang 在gc current request等待上,导致整个实例响应停滞近 5 分钟
真正该查的不是参数值,而是私网稳定性
95% 的“误驱逐”根本原因不是参数小,而是私网本身不可靠。调整前必须确认以下几点:
- 私网是否独占物理链路?严禁与管理网、存储网共用交换机或 VLAN —— 某银行项目因私网流量被 NFS 备份打满,平均延迟飙至 80ms,触发频繁 WARNING
- 是否启用 Jumbo Frame?RAC 私网建议 MTU ≥ 9000,否则每秒数百个 TCP 心跳包易被分片丢弃
- 检查
/var/log/messages和$GRID_HOME/log/<hostname>/cssd/ocssd.log中是否有IPC timeout、network interface down或ARP failed类错误 - 用
ping -M do -s 8972 <peer_private_ip>(Jumbo Frame 场景)持续测 1 小时,看丢包率和 P99 延迟是否稳定在 1ms 内
如果确需调整,必须同步修改两个参数
misscount 和 disktimeout 是耦合关系:Oracle 要求 disktimeout > misscount,且差值建议 ≥ 30 秒。生产环境只应在以下情况谨慎调整:
立即学习“前端免费学习笔记(深入)”;
- 私网实际 P99 延迟长期稳定在 25–40ms,当前默认
misscount=30频繁触发 50%/75% WARNING,但从未真正驱逐 - 调整命令必须以 root 执行,且仅限单节点操作:
/u01/app/grid/product/19.0.0/grid_1/bin/crsctl set css misscount 45和/u01/app/grid/product/19.0.0/grid_1/bin/crsctl set css disktimeout 210 - 修改后必须重启该节点的 CSSD:
crsctl stop crs && crsctl start crs(注意:不是 reboot 整机) - 切勿在运行中的多节点集群上批量修改;先停非关键节点,验证日志无
clssnmDiscHelper: node <n> is not responding类新报错,再推进其余节点
最常被忽略的一点:调整后要检查 crsctl get css reboottime 是否仍为默认 3 秒。若私网恢复慢但 reboottime 过短,节点可能在 CSSD 重启完成前就被强制断电,造成 Voting Disk 元数据损坏。


















