Redrock Postgres 文档
主页 切换暗/亮/自动模式 切换暗/亮/自动模式 切换暗/亮/自动模式 返回首页

53200 内存不足

详细信息: 请求分配内存失败

您可能会遇到如下所示的错误消息。

ERROR: out of memory
DETAIL: Failed on request of size 536870912.

解释:

当PostgreSQL无法分配运行查询或完成任何其他内部操作所需的内存时,会发生此低级别的内存不足(OOM)错误。

请注意,根据您的操作系统配置,您可能还会看到server process was terminated by signal 9: Killed消息,当操作系统的OOM终止程序进程由于整个系统内存不足而开始运行时,可能会发生这种情况。

PostgreSQL通常擅长处理明确的内存不足(OOM)错误,因此,如果您只有短暂的内存不足情况,它将在不重新启动的情况下恢复,也不会崩溃。

另一方面,如果您收到OOM killer消息,指示进程已被内核终止,PostgreSQL将重新启动,然后进入到恢复模式。

通常,不建议在重复的OOM条件下操作数据库,因为您可能随时看到意外的错误消息,并且数据库进程有被系统终止的风险。

建议的操作:

首先,如果您看到此日志事件,则捕获完整消息是有意义的,包括以TopMemoryContext开头并详细描述各个内存块的后面部分信息,以供后续分析。这个相当长的内存统计日志信息可以帮助确定PostgreSQL的哪个部分使用了内存。

更一般地说,当使用过高的work_mem配置,并且数据库有大量活跃的连接时,通常会发生内存不足。

如果您经常遇到OOM错误,建议的第一步是减少work_mem配置,这样可以提高稳定性,但代价是将更多的排序/哈希操作转到磁盘。

在问题发生时监视活跃连接数通常也是有意义的。若要了解当前连接数,请运行以下查询。

SELECT count(*) FROM pg_stat_activity;

此外,如果您的确需要更多的内存来使用,您可以评估减少shared_buffers配置,以便为连接直接使用的内存提供更多可用内存。这应该小心完成,同时主动观察缓冲区缓存命中率统计信息。