在 Linux 上运行 IBM Informix(尤其是 IDS / Informix Dynamic Server)时出现内存溢出(OOM,Out Of Memory),通常不是“Bug”那么简单,而是配置、系统资源、负载和操作系统机制共同作用的结果。下面按「常见原因 → 排查方向 → 解决建议」系统说明。
Informix 大量使用 System V 共享内存:
如果 onconfig 中配置超过物理内存,Linux 会直接 OOM。
✅ 检查项:
ipcs -m
onstat -g mem
onstat -p
Linux 默认启用 OOM Killer:
oninit日志表现:
dmesg | grep -i oom
典型输出:
Out of memory: Kill process 12345 (oninit)
Informix 配置按:
例如:
容器、K8s、云主机常见:
会占用:
dmesg -T | grep -i oom
journalctl -k | grep oom
onstat -g seg
onstat -g mem
onstat -g sql
ps -eo pid,ppid,rss,vsz,comm | grep oninit
ipcs -m -l
ipcs -m
重点参数:
BUFFERS
LOCKS
LOGSIZE
LOGBUFF
PHYSBUFF
经验值:
临时:
sysctl -w vm.overcommit_memory=2
或修改:
/etc/sysctl.conf
vm.overcommit_memory=2
vm.overcommit_ratio=80
⚠️ 不建议完全禁用 OOM
echo -1000 > /proc/<pid>/oom_score_adj
或 systemd:
[Service]
OOMScoreAdjust=-1000
确保:
cgroup memory.limit_in_bytes > Informix 总需求
| 场景 | 原因 |
|---|---|
| 刚启动就 OOM | 共享内存算错 |
| 运行中突然挂 | 长事务 / OOM Killer |
| 容器里必挂 | cgroup 限制 |
| 升级后异常 | 新版本内存模型变化 |
你可以提供:
onconfig 关键参数dmesg OOM 日志我可以直接帮你算 该配多少内存、哪里溢出。