直接根据安装日志提示的参数名修改,执行sysctl -w临时生效并sysctl -p持久化,确保RAC各节点参数值一致且符合Oracle 19c官方要求,特别注意kernel.sem四字段组合、shmall/shmmax按内存和SGA计算、fs.aio-max-nr必须设为1048576。
Oracle 19c RAC安装时提示“kernel parameter check failed”怎么处理
直接看日志里报的参数名,别猜。oracle installer(runinstaller)在预检阶段会比对 /proc/sys/ 下的实际值和它内置的最低要求,只要有一项不达标就卡住,且错误信息里会明确写出哪个参数、当前值、期望值。
常见触发点是 net.ipv4.ip_local_port_range、fs.file-max、kernel.sem、kernel.shmall 和 kernel.shmmax —— 这几个在RAC环境下要求比单机更严格,尤其 kernel.sem 的第四个字段(semmsl, semmns, semopm, semmni)必须同时满足 Oracle 文档里的组合值(19c RAC 要求至少 250 32000 100 142)。
- 先用
sysctl -p确认当前生效值,不是只看/etc/sysctl.conf文件里写了没 - 修改后必须执行
sysctl -p,否则重启前不生效;RAC 安装过程不会自动 reload - 如果用了 systemd-sysctl(如较新版本的 Oracle Linux 8),还要检查
/etc/sysctl.d/99-oracle-rac.conf是否被覆盖或加载顺序错乱
为什么改了 /etc/sysctl.conf 还是不生效
因为 RAC 安装脚本调用的是内核实时值,不是配置文件快照。很多用户只编辑了文件却忘了应用,或者改完没验证。
正确验证流程:
– 执行 sysctl -w kernel.shmmax=4398046511104(示例值)临时生效
– 再执行 sysctl kernel.shmmax 看输出是否匹配
– 最后 sysctl -p 持久化
-
sysctl -p默认只加载/etc/sysctl.conf,不递归读/etc/sysctl.d/下的文件(除非系统启用了该行为) - 某些发行版(如 OL8)默认禁用
/etc/sysctl.d/,需确认systemd-sysctl服务状态:systemctl status systemd-sysctl - RAC 节点间参数必须完全一致,建议用
scp同步配置后,在每个节点单独运行sysctl -p
kernel.shmall 和 kernel.shmmax 的值怎么算才安全
不能拍脑袋填“最大值”。这两个值要配合服务器物理内存和 SGA 预期大小来设,填太大反而触发内核拒绝分配。
-
kernel.shmmax应 ≥ 单个实例最大 SGA(比如你计划配 32G SGA,就设为34359738368,即 32×1024³) -
kernel.shmall单位是页(page),默认页大小 4KB,所以公式是:(物理内存GB × 1024 × 1024 × 1024) / 4096;例如 128G 内存 →33554432 - 注意:RAC 多实例共用共享内存段,
shmall要覆盖所有实例 SGA 总和,不能只按单实例算 - Oracle 19c 官方文档明确要求
shmall≥2097152,但这是底线,实际生产环境远不够
检查时发现 fs.aio-max-nr 报错但文档没提,要不要调
要调。虽然 Oracle 19c 安装文档里没把 fs.aio-max-nr 列进“强制参数”,但 RAC 的 ASM 实例依赖异步 I/O,Installer 实际校验逻辑里包含了它,阈值是 1048576(1M)。
现象:安装界面卡在“Checking operating system requirements”,日志里出现 fs.aio-max-nr = xxxxxx, required: 1048576。
- 这个参数不能像其他参数一样用
sysctl -w动态调高(内核限制),必须写入/etc/sysctl.conf并重启或重载 - 有些旧内核(如 EL7.6 之前)即使设了也无效,需确认内核版本:
uname -r≥3.10.0-957 - 若使用 UEK 内核,还需检查是否启用了
aio模块:lsmod | grep aio
最易被忽略的是:RAC 安装检查脚本对参数名大小写敏感,fs.aio-max-nr 不能写成 fs.aio_max_nr 或漏掉连字符——输错一个字符,检查就失败。

















