温馨提示×

Linux Oracle内存不足咋办

小樊
32
2026-07-01 04:21:50
栏目: 云计算

Oracle 在 Linux 上内存不足,通常不是“加内存”这么简单,而是监控 + 调参数 + 排查异常一起处理。下面按排查 → 应急 → 根治 → 最佳实践给你一整套方案。


一、先搞清楚:到底是“哪一块”内存不足?

1️⃣ 看系统整体内存

free -h

重点看:

  • available(可用内存)
  • swap 是否大量使用(swap 很高说明真的内存不够)

2️⃣ 看是不是 Oracle 吃光了

top

ps -eo pid,user,%mem,vsz,rss,cmd | sort -k4 -nr | head

常见大户:

  • oracle
  • ora_
  • pmon, smon, dbw, lgwr

3️⃣ 看 Oracle SGA / PGA 占用

show parameter sga_max_size
show parameter sga_target
show parameter pga_aggregate_target

Oracle 非常容易 SGA + PGA > 物理内存


二、紧急救急(先让库活下来)

✅ 1. 释放文件系统缓存(不会杀进程)

sync
echo 1 > /proc/sys/vm/drop_caches

⚠️ 不影响数据库,但会降一点 IO 性能


✅ 2. 停不必要的服务

systemctl list-units --type=service

如:

  • 监控 agent
  • 备份工具
  • 其他业务程序

✅ 3. 临时降低 Oracle 内存(仅紧急情况)

alter system set sga_target=4G scope=both;
alter system set pga_aggregate_target=1G scope=both;

⚠️ 不要低于官方最低值


三、Oracle 内存配置调优(核心)

✅ 1. 总原则(非常重要)

SGA + PGA < 60% ~ 70% 物理内存

假设你是 16G 内存服务器

  • SGA = 8G
  • PGA = 2G
  • 系统 = 6G

✅ 2. 推荐参数(现代 Oracle)

memory_target=0
memory_max_target=0
sga_target=8G
sga_max_size=8G
pga_aggregate_target=2G

如果是 12c+ 且用 AMM

memory_target=10G
memory_max_target=10G

四、大坑:HugePages(非常关键)

❗ 没开 HugePages,Oracle 很容易 OOM

查看:

cat /proc/meminfo | grep Huge

如果是:

HugePages_Total = 0

说明 没开

✅ 开启 HugePages(强烈建议)

大致步骤:

vi /etc/sysctl.conf
vm.nr_hugepages = 4096
sysctl -p

Oracle 官方文档有 hugepages_settings.sh 脚本,能帮你算。


五、内核参数也要检查

vi /etc/sysctl.conf

推荐:

vm.swappiness = 1
vm.overcommit_memory = 2
vm.overcommit_ratio = 90

生效:

sysctl -p

⚠️ overcommit_memory=2 能防止 OOM Killer 杀 Oracle


六、是不是真有内存泄漏?

查 alert 日志

tail -f $ORACLE_BASE/diag/rdbms/*/*/trace/alert*.log

看 OOM Killer

dmesg | grep -i oom
journalctl -k | grep oom

七、常见错误 & 说明

现象 原因
ORA-4030 PGA 不够
ORA-00845 MEMORY_TARGET 超出 shm
ORA-27102 Linux 内存不足
数据库被 kill OOM Killer

八、推荐标准 Server 配置(示例)

内存 SGA PGA
8G 4G 1G
16G 8G 2G
32G 18G 4G
64G 40G 8G

九、如果你愿意,我可以帮你精准算

你可以直接告诉我:

  1. 物理内存多大
  2. Oracle 版本
  3. 单实例还是 RAC
  4. 是否用 ASM
  5. free -hshow parameter memory 输出

我可以给你一套 可直接执行的安全参数

0