PostgreSQL 与 OOM Killer:为何必须使用严格内存超额分配
本文解释了 PostgreSQL 遇到 OOM Killer(内存不足杀手)的根本原因,并论证了为什么必须启用严格内存超额分配(strict memory overcommit)来防止数据库进程被意外终止。文章深入分析了内存管理的运作机制,并为生产环境中的 PostgreSQL 部署提供了关键配置建议。
背景速读
- PostgreSQL 是一个广泛使用的开源关系型数据库,以其稳定性和对 ACID(原子性、一致性、隔离性、持久性)的严格遵循而著称。但它在内存管理上有一个特点:容易因为操作系统内存不足(OOM)而被内核杀死,这对生产环境是灾难性的。
- Linux 内核的内存过量使用(memory overcommit)机制,默认会允许进程申请超过物理内存总量的虚拟内存,只有在实际使用超出时才会触发 OOM Killer(内存不足杀手)随机杀掉进程。这对数据库这类需要大量连续内存的软件非常危险。
- 文章主张使用严格的 overcommit(vm.overcommit_memory=2),让内核在分配时就检查是否有足够内存,而不是等到耗尽才杀进程。这一配置在数据库运维社区中有争议,但作者基于实际生产经验强烈推荐。
- Ubicloud 是一家提供开源云基础设施服务的公司,其博客经常分享低层系统调优的实践经验。这篇文章面向的是数据库管理员、DevOps 工程师和自建 PostgreSQL 服务的团队。