在 Linux 上运行 IBM Informix(尤其是 IDS)时,出现“内存占用很高”的现象,通常不一定是内存泄漏,而是 Informix 的架构设计决定的。下面从原理、常见原因和优化建议几个方面说明。
Informix 是多线程 + 共享内存架构的数据库:
➡ 内存一旦分配,通常不会轻易释放回 OS
在 top / free 中:
例如:
oninit × 20 进程
共享内存 8GB
→ top 可能显示 20× 占用
✅ 实际物理占用只有 8GB
onstat -g buf
如果 buffer pool 设置几 GB,那内存必然高。
✅ 合理估算:
BUFFERPOOL = (数据活跃集大小) × 20%~30%
onstat -k
默认可能几十万锁。
每个锁约几十字节,但总量可观。
onstat -u
例如:
ipcs -m
onstat -g mem
onstat -g seg
重点看:
onstat -g mem
如果:
才可能是泄漏。
BUFFERPOOL size=2k,buffers=100000
LOCKS 100000
DBSPACETEMP tempdbs
长时间运行的实例,可计划重启释放碎片。
Linux 上 Informix 内存高,大多是因为“设计就是吃内存”,而不是异常。
如果你愿意,可以贴出:
onstat -g memonstat -g cfg | grep -E "BUFFERPOOL|LOCKS"ipcs -m我可以帮你精确分析是否合理。