oracle安装前swap必须严格按memtotal分级配置:≤2gb配1.5倍,2–16gb配等量,>16gb固定16gb;创建时用dd bs=1g count=n或bs=1024k count=1024×n,立即chmod 600并验证swapon -s及/proc/swaps priority≥0。

Oracle 安装前的 swap 大小不是“够不够”的问题,而是必须严格匹配物理内存(MemTotal)范围来配置,否则安装检查阶段直接报错中断——哪怕你勾选了“忽略”,后续实例启动或高负载时仍大概率触发 OOM 或 ORA-27102。
查清当前 MemTotal 再决定 swap 应该设多大
别凭印象或文档截图估算。先执行:
grep MemTotal /proc/meminfo
结果类似 MemTotal: 16425984 kB(即约 16 GB)。然后对照 Oracle 官方分级规则定目标值:
- RAM ≤ 2 GB → swap = RAM × 1.5
- 2 GB
- RAM > 16 GB → swap 固定为 16 GB(不是更大更好)
注意:Oracle 19c 生产环境常见配 32 GB swap 是因为实际物理内存远超 16 GB(比如 64 GB),但此时仍只按 16 GB 配;强行配更大 swap 不仅无益,还会拖慢 swapon 初始化和 mkswap 校验速度。
用 dd + mkswap 创建 swapfile 时 bs 和 count 别乱套公式
dd 命令里 bs 和 count 的乘积才是最终大小,但单位易错。例如要建 8 GB swapfile:
- 错:
dd if=/dev/zero of=/swapfile bs=1M count=8—— 这里1M是 1024×1024 字节,count=8得到 8 MB,不是 GB - 对:用
bs=1G count=8,或更稳妥的bs=1024k count=8192(1024k × 8192 = 8,388,608 KB ≈ 8 GB) - 避免用
bs=1M混淆:Linux 中M默认是 1024×1024,但部分 shell 或旧版dd解析不一致,建议统一用k或G
执行完 dd 后务必 sync 一下,否则 mkswap 可能读到未落盘的脏数据,导致后续 swapon 失败或系统不稳定。
swapon 报 “insecure permissions” 就得立刻改权限
如果执行 swapon /swapfile 提示 insecure permissions 0644, 0600 suggested,这不是警告,是拒绝挂载的前置校验失败(尤其在 CentOS 7+/RHEL 7+ 上默认启用)。
- 必须立刻执行:
chmod 0600 /swapfile - 不能用
chmod -R,swapfile 是普通文件,不是目录 - 权限不对会导致
swapon静默失败,free -m看不到新增 swap,但错误日志可能只写进dmesg,不易发现
顺带一提:/etc/fstab 里加的那行 /swapfile swap swap defaults 0 0,如果权限没提前设对,系统重启后 swapon -a 会跳过它,导致 swap 彻底丢失——这点在虚拟机重装后最容易被忽略。
/etc/fstab 条目格式稍有偏差就会开机不生效
fstab 行看似简单,但三个关键点出错就白配:
- 第一列路径必须和
swapon时用的完全一致(含绝对路径、无符号链接) - 第二列必须是
swap(不能写成swp或留空) - 第三列也必须是
swap(文件系统类型),不是ext4或其他
写完别忘了验证:swapon -a -v(加 -v 看详细过程),再 swapon -s 确认已列出。如果 fstab 有语法错误,swapon -a 会直接退出且不提示具体哪一行错,只能靠 systemctl status systemd-swap 或 dmesg | tail 排查。
swap 配置真正麻烦的不是创建动作本身,而是每个环节都依赖上一个环节的精确输出:MemTotal 错了,目标值就错;dd 算错了,mkswap 校验会慢几倍甚至失败;权限或 fstab 少一个字符,重启后全归零。别跳步骤,也别信“差不多”。











