A primeira coisa a considerar seria aumentar shared_buffers
caminho para cima, pelo menos para 1GB e, possivelmente, muito mais, até 25% da memória principal. Isso é o que o documento diz .
Com apenas 32MB, dos quais ~ 18Mb já serão usados apenas para lidar com max_connections
a 950, os processos filhos têm acesso a pouca memória compartilhada suficiente para compartilhar qualquer coisa.
Isso pode ou não atenuar o problema de consumo de memória para sua carga de trabalho e situação específicas, mas, de qualquer forma, isso é um passo na direção certa. O valor atual é insanamente baixo.
Sobre a OOM especificamente, você pode considerar as soluções alternativas oferecidas no Linux Overcommit Memory seção do documento. Note, no entanto, que é um parágrafo curto para um problema complexo. Há mais, por exemplo, nesta postagem do blog e seus comentários com dicas para entender o contexto e as compensações envolvidas na limitação ou desativação da OOM.
Além disso, um vazamento de memória no Postgres é sempre possível. Você precisa ter certeza de que está executando a versão secundária mais recente, caso ela já esteja corrigida. As notas de lançamento que acompanham cada bugfix-release definitivamente mencionam vazamentos de memória de tempos em tempos.