oracle rac安装和运行时所有检查均读取/proc/sys实时值而非配置文件,必须执行sysctl -p使/etc/sysctl.conf生效,并确保所有节点参数一致,否则会导致ohasd卡死、cssd重启或root.sh失败。

直接看 /proc/sys 下的实时值,别信配置文件
Oracle RAC 安装和运行时所有检查(包括 root.sh、ohasd 启动、cssd 初始化)都读 /proc/sys/ 里的值,不是 /etc/sysctl.conf 或 /etc/sysctl.d/ 里的配置。改完文件但没执行 sysctl -p,或只在一个节点执行,其他节点还是旧值,就会在集群启动中途崩溃——比如 ohasd 卡死、cssd 反复重启、root.sh 报 ORA-29701 或直接退出无日志。
诊断第一步就是登录每个节点,逐项确认:
-
sysctl kernel.sem—— 输出必须是kernel.sem = 250 32000 100 142,四个字段缺一不可,不能只看第一个或最后一个 -
sysctl kernel.shmmax—— 必须 ≥ 单个实例最大 SGA(如 SGA=32G → 值至少为34359738368) -
sysctl kernel.shmall—— 单位是页,按所有实例 SGA 总和 ÷ 4096 计算,不是物理内存 ÷ 4096 -
sysctl fs.aio-max-nr—— 必须等于1048576,少一位都不行 -
sysctl vm.min_free_kbytes—— 看free -g的Available列,该值不能超过其 1/4;设成33554432(32MB)在 8GB 内存机器上已接近临界
查日志要盯住三个位置,不是只翻 alert.log
RAC 因内核参数宕机,错误往往不报在数据库 alert.log,而藏在更底层的日志里:
-
$GRID_HOME/log/<hostname>/alert<hostname>.log</hostname></hostname>:找CRS-1604、CRS-1612、ORA-29701,这些是 cssd 检测到资源不足后主动驱逐节点的信号 -
/var/log/messages:搜out of memory、page allocation failure、ohasd、pmon,vm.min_free_kbytes 过大会在这里留下 OOM killer 杀进程记录 -
$GRID_HOME/log/<hostname>/cssd/ocssd.log</hostname>:看是否反复出现reconfiguration cycle failed或IPC send timeout,这常是kernel.shmall不足导致共享内存段分配失败的间接表现
kernel.sem 和 shmall 填错最致命,但现象隐蔽
这两个参数出问题不会立刻报错,而是让集群“慢性死亡”:
-
kernel.sem第四个字段(semmni)低于 142,RAC 可能成功安装,但某次 OCR 自动备份或 ASM 实例重启时突然失败,报ORA-27154或ORA-27300 -
kernel.shmall填太大(比如照搬文档填4294967296),内核会静默拒绝部分大页分配,导致ora_pmon启动后 VSZ 异常偏小,ps -eo pid,comm,args --sort=-vsz | head -10能看出端倪 -
vm.nr_hugepages配错不会在预检报错,但grep HugePages_ /proc/meminfo会显示HugePages_Free为 0,且ora_smon进程 RSS 比预期低 20% 以上
修复后必须验证 IPC 资源是否真就位
改完参数、执行 sysctl -p、甚至 reboot 后,仍要手动确认内核资源实际可用:
- 运行
ipcs -lm,检查max total shared memory是否 ≥shmmax,max number of semaphores是否 ≥semmns - 用
su - grid -c "sqlplus / as sysasm"连 ASM,执行SELECT NAME, STATE FROM V$ASM_DISKGROUP;,如果卡住或报ORA-15032,大概率是shmall或aio-max-nr未生效 - 在每个节点跑
cluvfy stage -pre crsinst -n all -verbose,它比 runInstaller 更严苛,会校验所有节点间参数一致性,连net.ipv4.ip_local_port_range都会比对
真正难缠的从来不是明面上报错的参数,而是那些改了值、看似合理、却刚好卡在内核分配阈值边缘的配置——比如 vm.min_free_kbytes 在 256GB 内存机器上设成 300MB,系统能起来,但 ohasd 启动一半就停住,/var/log/messages 里只有两行 page allocation failure,再无下文。











